让事件循环休眠直到下一个事件到来
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();
}
我需要将一些 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();
}