【发布时间】:2016-02-09 20:47:36
【问题描述】:
我的 Qt 应用程序的主窗口是一个普通的 QMainWindow 子类。在那个窗口中,我有几个按钮;每个都有其clicked 信号连接到自己的插槽,每个插槽创建一个不同的QDialog,如下所示:
void onButtonA_clicked()
{
MyADialog* dialog = new MyADialog(this);
dialog->exec();
delete dialog;
}
我一直在阅读这篇文章:https://wiki.qt.io/Threads_Events_QObjects#Events_and_the_event_loop 并且作者说
你永远不应该阻塞事件循环
这让我很担心; exec 是一个阻塞函数,所以根据他所说的(他的例子是Worker::doWork,它做了很多工作并且需要一些时间来完成)我的代码阻塞了事件循环,但我没有注意到任何会建议这个;相反,主窗口似乎表现正常,当我更改代码以使用show() 方法时没有任何区别。
我是否阻塞了事件循环?我应该在这里使用不同的方法吗?
【问题讨论】:
-
据我所知,
int QDialog::exec()不会阻止 Qt 应用程序,只会阻止父窗口,并且仅当对话框是窗口模式时。 -
@Tarod 嗯,它是一个阻塞函数(因为它在 QDialog 关闭之前不会返回),这就是我不确定的原因。
标签: c++ qt blocking event-loop qeventloop