我需要将一些java SWT代码移植到Qt:
Shell shell;
while ((shell = getStatusDialogShell()) != null
&& !shell.isDisposed()) {
if (!shell.getDisplay().readAndDispatch()) {
Display.getDefault().sleep();
}
}
调用Display.getDefault().sleep();
将事件循环置于睡眠状态,直到下一个事件到达为止
我遇到的问题是我无法在Qt中找到如何模拟这个问题。看起来没有相当于将Qt事件循环置于睡眠状态直到下一个事件到来。有什么想法吗?
答案 0 :(得分:1)
使用QEventLoop :: WaitForMoreEvents的QEventLoop::ProcessEventsFlags是否解决了你的问题或两者的组合?
答案 1 :(得分:1)
您的代码在Qt中是非惯用的,尽管它有直接翻译:
void MyClass::mySlot() {
MyDialog dialog;
...
if (dialog.exec() == QDialog::Accepted) {
// code to run on dialog's acceptance
}
}
这是非惯用的,因为您重新进入事件循环,这可能会在设计其余代码时产生各种问题,也会在运行时产生。
然后,最好显示一个对话框,返回主事件循环,然后让它处理对话框:
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();
}