我正在试验这个WA_DeleteOnClose
属性,它实现了我所需要的。比手动做同样的事情要整洁得多。但是,有一个问题:如果我构造 my QMainWindow
that WA_DeleteOnClose
is applied to without parent,它不会在关闭时被删除。而且,如果我确实设置了父级(QMainWindow
应用程序的主),则有问题的次要QMainWindow
会丢失其任务栏按钮,这是不可接受的。我该如何解决这个困境?
问问题
1300 次
1 回答
1
WA_DeleteOnClose
应该适用于任何顶级小部件。如果没有,那就是一个错误,或者你做错了其他事情,比如运行一个嵌套的事件循环。对窗口是否被删除的简单测试是:
QObject::connect(widget, &QObject::destroyed, [](QObject * obj){
qDebug() << obj << "was destroyed";
});
WA_DeleteOnClose 应用于没有父级,它不会被删除
行为的实现中没有代码WA_DeleteOnClose
受具有父级的小部件影响。只要小部件是 -a Qt::Window
,它就会被删除。见closeHelper
。
有问题的辅助 QMainWindow 丢失其任务栏按钮,这是不可接受的
这可能适用于任何QWidget
,而不仅仅是QMainWindow
。
确认一下,这个测试用例不适合你吗?让我们知道应用程序输出显示的内容。
#include <QLabel>
#include <QPointer>
#include <QApplication>
int main(int argc, char ** argv) {
QApplication app(argc, argv);
QPointer<QLabel> label = new QLabel("Hello, world");
label->setAttribute(Qt::WA_DeleteOnClose);
label->setAttribute(Qt::WA_QuitOnClose);
label->show();
app.exec();
qDebug() << qVersion() << label; // will be null if label was deleted
return 0;
}
于 2015-07-16T20:10:22.960 回答