我是 Qt 新手
我的情况是:出于某种原因,我必须从主线程发出心跳信号,同时我想使用以下命令创建一个 QMessageBox 窗口:
reply = QMessageBox::question(this, tr("Sure want to quit?"), tr("Sure quit?"), QMessageBox::Yes|QMessageBox::No);
我只是想让这个消息框阻止用户从其他窗口输入,但我不想阻止心跳信号。我该怎么做?或者这是在 Qt 中默认完成的?
我是 Qt 新手
我的情况是:出于某种原因,我必须从主线程发出心跳信号,同时我想使用以下命令创建一个 QMessageBox 窗口:
reply = QMessageBox::question(this, tr("Sure want to quit?"), tr("Sure quit?"), QMessageBox::Yes|QMessageBox::No);
我只是想让这个消息框阻止用户从其他窗口输入,但我不想阻止心跳信号。我该怎么做?或者这是在 Qt 中默认完成的?
QMessageBox::question 在内部执行事件循环。所以一切继续运行。你不必担心这一点。
但是,您可以使用此类功能获得奇怪的效果。例如,如果您的心跳可以打开一个对话框,即使另一个对话框已经打开,该对话框也会打开。还假设您有一个 TCP/IP 堆栈正在运行。这个堆栈可以做的所有事情都将继续发生......无论 QMessageBox::question() 当前在哪里执行......就像在某个函数的中间一样。
这就是为什么我们公司有一项政策禁止使用 QMessageBox::question() (和类似的)并在我们的应用程序中的对话框上调用 exec() 。我们在堆上创建模态对话框并使用它们的信号。