使两个QT对话框相互关闭
Making two QT dialogs close each others
我已经看到了这个问题:QT/C - 关闭一个小部件时关闭两个小部件但是我没有这个mainwindow< ->小部件关系。
class Ui_DialogResults
{
public:
QDialog *_Dialog;
void setupUi(QDialog *Dialog)
{
_Dialog = Dialog;
}
};
class Ui_DialogSearch
{
public:
QDialog *_Dialog;
void setupUi(QDialog *Dialog)
{
_Dialog = Dialog;
}
};
namespace Ui {
class Ui_Search : public Ui_DialogSearch {};
class Ui_Results : public Ui_DialogResults {};
}
class Search : public QDialog{
public:
Search(){
ui.setup(this);
}
void closeEvent(QCloseEvent *event)
{
//saves scan settings here
pResults->_Dialog->close();
}
Ui::Ui_Search ui;
Ui::Ui_Results *pResults;
}
class Results : public QDialog{
public:
Results(){
ui.setup(this);
}
void closeEvent(QCloseEvent *event)
{
//saves scan settings here
pSearch->_Dialog->close();
}
Ui::Ui_Search *pSearch;
Ui::Ui_Results ui;
}
打开搜索对话框时,结果对话框也将打开,反之亦然。两个对话框的线程也填充了搜索实例中的指针,反之亦然。每个班级都有过度的closeEvent()
,因此他们互相关闭。我本来会期望交叉递归后果并崩溃,但显然效果很好。QT Doc States
The QCloseEvent class contains parameters that describe a close event.
Close events are sent to widgets that the user wants to close, usually by choosing "Close" from the window menu, or by clicking the X title bar button. They are also sent when you call QWidget::close() to close a widget programmatically.
这是UB吗?
由于您已经在搜索和结果对话框之间具有相互参考,因此您可以通过将指针设置为null并进行一些基本检查来轻松避免任何潜在的事件。
启动闭合的对话框将自己的指针设置为其他对话框,将指针复制到另一个指针以临时值,将另一个指针设置为null,并通过临时指针关闭另一个对话框。如果指向另一个对话框的指针已经为null,则意味着其他对话框已启动关闭,因此除了调用基类实现以关闭对话框外,什么也不做。
是不确定的行为吗?否。无证?可能。(没有找到任何应该有效的明确陈述(。意外?可能不会。QT很成熟,尽管并非总是记录在最后一个细节上。我敢打赌,他们每个小部件只允许一个关闭事件。
相关文章:
- Qt为所有对话框设置通用背景
- 如何抓取指向Qt中弹出对话框的指针,该对话框阻止了QTest中的UI线程
- Qt 忙处理对话框
- Qt从主窗口打开对话框
- 模型对话框移动到主窗口后面的Qt错误
- 用静态版本的QT编译时,文件对话框崩溃
- QT如何显示,请等待对话框,而插座正在等待响应
- Qt - 创建主窗口前的非模态对话框
- 异步显示 Qt 对话框
- 使两个QT对话框相互关闭
- QT-如何处理对话框的内存管理
- 在我关闭刚开始的孩子对话框并进入父母对话框之后,我的QT桌面应用程序不断崩溃
- 在Qt中创建类,其中QDialog内置特定对话框
- 在QT对话框上布置图像
- 如何从另一个线程关闭对话框?QT
- 注销侏儒会话时如何从Qt应用程序执行"confirm" gnome会话管理器的对话框(不使用QSessionManager)
- 无法更新 qt 对话框中的按钮
- 无法从对话框中关闭应用程序(Qt 应用程序)
- QT对话框窗口禁用ewerningOntonop会导致窗口关闭
- Link2019:调用对话框qt的未解析的外部符号