非模态

时间:2017-09-25 16:53:31

标签: c++ qt qtstylesheets qmessagebox

我想显示一个非模态QMessageBox,以告知代码运行时发生了什么,然后QMessageBox应该在代码完成时关闭。父级是QWidget

如果我打电话给msgBox.show()那么它确实是非模态的并且代码正在运行但是msgBox完全是黑色的我无法找到一种方法来放置任何其他颜色以便我可以写一些东西

如果我拨打msgBox.exec()而不是背景颜色,文字显示效果很好,但它是模态的,代码会停止,除非用户按下OK

这是我的代码:

QMessageBox* msgBox=new QMessageBox(this);
msgBox->setWindowTitle("Title");
msgBox->setText("<font color=\"Black\">Some Text");
msgBox->setWindowModality(Qt::NonModal);
msgBox->setStyleSheet("background-color:white;");
msgBox->exec(); //with this line it is modal
//msgBox->show(); //with this line it is non modal but background is black

我还尝试使用QWidget,如果我把它放在其他地方并且由于后面运行的代码而变得很黑,这样工作正常。

如果有人能找到解决方案,我会提前感谢你! :)

1 个答案:

答案 0 :(得分:0)

我建议使用信号/插槽机制来显示/隐藏QMessageBox,而不是将所有内容放在同一个函数中,特别是如果代码需要花费很多时间。

您的实际(元)代码:

msgBox->show();
worker code
msgBox->close();

我的建议:

QTimer::singleShot(0, msgBox, SLOT(show));
worker code
QTimer::singleShot(0, msgBox, SLOT(close));

我还建议将worker代码移动到另一个线程。通过这种方式,它不会影响用户界面。