QT QMessageBox 设置非阻塞
时间: 2023-10-29 07:02:12 浏览: 538
Qt模式弹框不阻塞
QMessageBox默认是阻塞的,即在显示消息框时,程序会停止执行,直到用户关闭消息框。如果需要设置非阻塞,可以使用QMessageBox::open()函数,该函数会返回一个QDialog::DialogCode类型的枚举值,表示用户对消息框的操作。
例如:
```c++
QMessageBox msgBox;
msgBox.setText("Hello World!");
QTimer::singleShot(0, &msgBox, &QMessageBox::open);
```
在这个例子中,使用了Qt的定时器QTimer,将消息框的显示延迟到下一次事件循环中执行,从而避免了阻塞程序的问题。QMessageBox::open()函数的返回值可以用于处理用户的操作,例如:
```c++
QMessageBox msgBox;
msgBox.setText("Hello World!");
QTimer::singleShot(0, &msgBox, &QMessageBox::open);
QEventLoop loop;
QObject::connect(&msgBox, &QMessageBox::finished, &loop, &QEventLoop::quit);
loop.exec();
switch (msgBox.result()) {
case QMessageBox::Ok:
qDebug() << "User clicked OK!";
break;
case QMessageBox::Cancel:
qDebug() << "User clicked Cancel!";
break;
default:
break;
}
```
在这个例子中,使用了QEventLoop来等待用户对消息框的操作,直到消息框关闭后,才会继续执行程序。根据QMessageBox::open()函数的返回值,可以判断用户点击了哪个按钮。
阅读全文