惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
IT之家
IT之家
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Help Net Security
J
Java Code Geeks
aimingoo的专栏
aimingoo的专栏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research

Qt

撸了一个面向 Qt Widgets 的 Fluent 风格组件库 请问一下大家用 ai 做 qt 应用的时候有什么 skill 或者方法改进 ui 吗? qt 新手求助: No documents matching 'ui_mainwindow.h' could be found 请教几个 qt6, macos 打包遇到依赖问题。 新建一个 qt 项目,运行时,底下应用程序输出 1127, FromFilemap Qt5 托盘菜单右击时的异常 有没有什么工具可以美化 qt 界面的? Qt 有什么不错的第三方控件库吗? 寻求帮助!在 qt creator 里面创建 quick 项目失败,找不到原因。 关于 QT 中通过信号与槽的方式启动子线程的问题。 寻找一起开发这个开源项目的人, qt c++的,信息收藏、Kindle/微信读书/豆瓣阅读笔记管理 使用 Qt 做的软件界面太丑怎么办?有没有什么美工插件或者入门教程 有哪位大佬对修改 3DSlicer 或者开发插件有经验? 如何正确安装 QT? 请教 qt svg 打包后无法显示问题。 如何在 QT 中的多个级别的窗口之间传输消息 关于 QT(C++)通过继承 QObject 的方法实现多线程,子线程调用失效。 qt5 中文乱码问题怎么解决? 现在写 Qt 的主流 IDE 工具是什么? 请问多线程之间是如何协调配合的? QSerialPort 如何实现同一个串口设备命令做出不同操作? qt creator 插件开发问题请教 求助一个读硬盘序列号的问题 关于 Qt6.6.0 无法设置程序图标的问题 求助,如何编译 openwrt 的时候加入 qt6 为什么 Qt Creator 界面如此丑陋 大家了解 Qt 和 qt-creator 的开源协议吗?基于它,可以写闭源商用的软件吗? 求助,使用 CLion 开发 Qt,创建了 UI 类不会使用 mac 下的 Qt/C++应用,通过 url scheme 唤起时,如何获取到唤起的链接? Qt 中的 `QFontMetrics.boundingRect()` 算出来的文本长度有时候会不对,应该如何处理。
在 Qt 中控件同时使用智能指针和父子关系,会有二次删除风险吗?
WangLiCha · 2024-07-05 · via Qt

比如一个像下面这样定义的 QDialog 窗体:

#ifndef PLAYDIALOG_H
#define PLAYDIALOG_H

#include <memory>
#include <QVBoxLayout>
#include <QDialog>

class QPushButton;

class PlayDialog : public QDialog
{
    Q_OBJECT
public:
    explicit PlayDialog(QWidget* parent = nullptr);

private:
    QVBoxLayout* m_layout;

    QPushButton* m_button1;
    std::shared_ptr<QPushButton> m_button2;
    QSharedPointer<QPushButton> m_button3;
};

#endif // PLAYDIALOG_H

#include "playdialog.h"

#include <memory>
#include <QDialog>
#include <QLayout>
#include <QPushButton>
#include <QVBoxLayout>

PlayDialog::PlayDialog(QWidget* parent) : QDialog(parent), m_layout(new QVBoxLayout(this))
{

    m_button1 = new QPushButton("BUTTON1", this);
    m_button2 = std::make_shared<QPushButton>("BUTTON2", this);
    m_button3 = QSharedPointer<QPushButton>::create("BUTTON3", this);

    m_layout->addWidget(m_button1);
    m_layout->addWidget(m_button2.get());
    m_layout->addWidget(m_button3.get());

    setLayout(m_layout);
}

其中的 QPushButton 都设置了 QDialog 窗体为父控件,m_button2m_button3分别用 C++原生和 Qt 的智能指针进行了包装。如果这个时候关掉父窗体,因为父子级关系三个按钮都会被释放,但是受智能指针管理的m_button2m_button3按理说也会被释放,这种时候会存在二次删除风险吗?是不是在 Qt 中不应该用智能指针管理设置了父子级关系的 QWidget 控件?还是说 Qt 封装过的 QSharedPointer 可以放心使用?