gpt4 book ai didi

c++ - 是否可以在没有父窗口的主窗口中使用 WA_DeleteOnClose 属性?

转载 作者:行者123 更新时间:2023-11-28 06:10:02 25 4
gpt4 key购买 nike

我正在试验 WA_DeleteOnClose 属性,它实现了我所需要的。比手动做同样的事情要整洁得多。但是,有一个问题:如果我构造我的 QMainWindowWA_DeleteOnClose 应用到没有父级的情况下,它不会在关闭时被删除。如果我确实设置了一个父级(应用程序的主 QMainWindow),则有问题的辅助 QMainWindow 会丢失其任务栏按钮,这是 Not Acceptable 。我该如何解决这个难题?

最佳答案

WA_DeleteOnClose 应该适用于任何顶级小部件。如果不是,那是一个错误,或者你做错了什么,比如运行嵌套的事件循环。窗口是否被删除的简单测试是:

QObject::connect(widget, &QObject::destroyed, [](QObject * obj){
qDebug() << obj << "was destroyed";
});

WA_DeleteOnClose is applied to with no parent, it doesn't get deleted

WA_DeleteOnClose 行为的实现中没有代码会受到具有父级的小部件的影响。只要小部件是-a Qt::Window,它就会被删除。参见 closeHelper .

the secondary QMainWindow in question loses its taskbar button, which is unacceptable

这可能适用于任何 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;
}

关于c++ - 是否可以在没有父窗口的主窗口中使用 WA_DeleteOnClose 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31461774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com