我是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()。我们正在堆上创建模态对话框并改用它们的信号。
关于c++ - QMessageBox会阻塞Qt中整个主线程的运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26502673/