c++ - QMessageBox会阻塞Qt中整个主线程的运行吗?

标签 c++ qt qmessagebox

我是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/

相关文章:

c++ - MS Visual C++ 中缺少 atanh 反双曲正切函数

c++ - C++ 的标准映射插入语义的基本原理?

c++ - 多次应用 QGraphicsDropShadowEffect 会使应用程序崩溃

c++ - 为什么打开 QMessageBox 时 Irrlicht 窗口变黑?

python - 如何在pyqt5中使用creator在qmessagebox中显示变量

c++ - 如何对设备执行非阻塞写入?

python - 在 C++ 和 Python 程序中使用命名管道的 IPC 挂起

linux - 在 linux 中生成鼠标按钮单击

qt - 如何在 Qt 中获取用户的下载文件夹?

c++ - 如何在运行时显示QT中的字符串列表?