让事件循环休眠直到下一个事件到来

Put event loop to sleep until next event arrives

我需要将一些 java SWT 代码移植到 Qt:

Shell shell;
while ((shell = getStatusDialogShell()) != null
                && !shell.isDisposed()) {
    if (!shell.getDisplay().readAndDispatch()) {
                Display.getDefault().sleep();
    }
}

调用 Display.getDefault().sleep(); 使事件循环进入休眠状态,直到下一个事件到达。
我遇到的问题是我找不到如何在 Qt 中模拟它。看起来没有等价物可以让 Qt 事件循环休眠直到下一个事件到达。有什么想法吗?

QEventLoop::ProcessEventsFlags 和 QEventLoop::WaitForMoreEvents 是否解决了您之前的问题或两者的结合?

您的代码在 Qt 中是非惯用的,尽管它有直接翻译:

void MyClass::mySlot() {
  MyDialog dialog;
  ...
  if (dialog.exec() == QDialog::Accepted) {
    // code to run on dialog's acceptance
  }
}

这不是惯用的,因为您正在重新进入事件循环,这可能会在其余代码的设计以及运行时引起各种问题。

然后,最好向主事件循环显示一个对话框,return,并让它处理该对话框:

void MyClass::mySlot() {
  auto dialog = new MyDialog{parent};
  dialog->setAttribute(Qt::WA_DeleteOnClose);
  connect(dialog, &QDialog::accepted, this, [this]{
    // code to run on dialog's acceptance
  };
  dialog->show();
}