Qt:parent-child 个小部件。关闭单个 child 小部件是否意味着关闭其他 children?
Qt: parent-child widgets. Does closing of a single child widget imply closing of other children?
我在测试 Qt 应用程序时遇到以下问题,它包含一个 parent 小部件和两个 child 小部件,它们是分开的 windows。如果 parent 小部件被隐藏,则关闭单个 child 小部件意味着关闭第二个 child 以及关闭整个应用程序。
这是 Qt 中 parent/child 小部件的正常行为吗?有没有办法让第二个 child 小部件和应用程序 运行 可见?
#include <QApplication>
#include <QtWidgets>
class MyWidget : public QWidget {
public:
MyWidget(const QString& title = "", QWidget *parent = nullptr) :
QWidget(parent) {
setWindowTitle(title);
setWindowFlags(windowFlags() | Qt::Window);
setVisible(true);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget parent("Parent");
MyWidget *child1 = new MyWidget("Child1", &parent);
MyWidget *child2 = new MyWidget("Child2", &parent);
QTimer::singleShot(5000, [&](){parent.hide();});
return a.exec();
}
简单的 classMyWidget 共有三个小部件:
parent 一个 'parent' 和两个 child 'child1' 和 'child2'。
5 秒后 parent 小部件被 QTimer::singleShot 隐藏。
之后,如果我关闭,例如child1window,第二个windowchild2
也自动关闭,申请结束
我希望 child1 和 child2 是独立的,关闭其中一个不应该关闭另一个。
通常 children 在 Qt 中是独立于另一个的,就像你希望的那样。但是,当最后一个 window 关闭时(参见 QApplication::lastWindowClosed),应用程序将作为一个整体关闭。可能这就是这里发生的事情。不过我不确定为什么。
您可以尝试为 windows 手动定义 closeEvents。你的行为仍然很奇怪,因为我记得读过隐藏 parent window 也应该在这里隐藏它的 children:(https://www.qtcentre.org/threads/61708-Multiple-windows-hide-parent-when-child-shown-unhide-when-child-closed).
我在测试 Qt 应用程序时遇到以下问题,它包含一个 parent 小部件和两个 child 小部件,它们是分开的 windows。如果 parent 小部件被隐藏,则关闭单个 child 小部件意味着关闭第二个 child 以及关闭整个应用程序。
这是 Qt 中 parent/child 小部件的正常行为吗?有没有办法让第二个 child 小部件和应用程序 运行 可见?
#include <QApplication>
#include <QtWidgets>
class MyWidget : public QWidget {
public:
MyWidget(const QString& title = "", QWidget *parent = nullptr) :
QWidget(parent) {
setWindowTitle(title);
setWindowFlags(windowFlags() | Qt::Window);
setVisible(true);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget parent("Parent");
MyWidget *child1 = new MyWidget("Child1", &parent);
MyWidget *child2 = new MyWidget("Child2", &parent);
QTimer::singleShot(5000, [&](){parent.hide();});
return a.exec();
}
简单的 classMyWidget 共有三个小部件: parent 一个 'parent' 和两个 child 'child1' 和 'child2'。 5 秒后 parent 小部件被 QTimer::singleShot 隐藏。 之后,如果我关闭,例如child1window,第二个windowchild2 也自动关闭,申请结束
我希望 child1 和 child2 是独立的,关闭其中一个不应该关闭另一个。
通常 children 在 Qt 中是独立于另一个的,就像你希望的那样。但是,当最后一个 window 关闭时(参见 QApplication::lastWindowClosed),应用程序将作为一个整体关闭。可能这就是这里发生的事情。不过我不确定为什么。
您可以尝试为 windows 手动定义 closeEvents。你的行为仍然很奇怪,因为我记得读过隐藏 parent window 也应该在这里隐藏它的 children:(https://www.qtcentre.org/threads/61708-Multiple-windows-hide-parent-when-child-shown-unhide-when-child-closed).