gpt4 book ai didi

qt - 与 QThread/QDialog 的竞争条件

转载 作者:行者123 更新时间:2023-12-04 06:36:29 25 4
gpt4 key购买 nike

我试图在以下情况下避免竞争条件:

QDialog* dialog = [...];
QThread* thread = [...];

connect(thread, SIGNAL(finished()), dialog, SLOT(accept()));

thread->start();
dialog->exec();

当线程在 QDialog::exec() 设置对话框之前完成时,由信号触发的“accept()”调用将丢失并且对话框不会自行关闭...

所以理想情况下,我只想在对话框准备好处理它之后才启动线程,但是我该怎么做呢?

最佳答案

诀窍是只有在对话框已经显示时才必须启动线程。所以你必须在 QDialog 的 showEvent 引发后启动它。
首先,您必须捕获 showEvent,您可以使用 QObject::installEventFilter 来执行此操作。和 QObject::eventFilter或通过子类化 QDialog覆盖 QWidget::showEvent .
完成后,您希望向线程发出信号以启动。您需要一个自定义信号,该信号在 YourClass::eventFilter 中发出或在 YourClass::showEvent取决于您选择捕捉表演事件的方式。
现在只需将该信号连接到 QThread::start()插槽,你应该完成(编辑:使用 Qt::QueuedConnection )。

确保您不处理 QDialog::accepted()两次信号!

关于qt - 与 QThread/QDialog 的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4816975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com