QProgressDialog / QMessageBox似乎从我的主窗口继承了StyleSheets

时间:2015-08-01 22:42:33

标签: qt

我使用这种静态方法打开QMessageBox:

reply = QMessageBox::question(this, "Save changes", "Save all modified files before exit?", QMessageBox::Yes|QMessageBox::No);

我后来也用这个打开了QProgressDialog:

QProgressDialog progress("Saving metadata to files...", "Abort", 0, queue.length()-1, this);

然而,两者似乎都从我的主窗口继承了深色(#333)。但是文字是黑色的,所以它不可见。

我尝试添加:

progress.setStyleSheet("color:#eee; background-color:#3a3a3a;");

但窗口看起来并不好看,因为它看起来没有边框等等。

为QProgressDialog和QMessageBox设置样式表的正确方法是什么?我通过静态方法?

有没有办法阻止两者从主窗口继承样式表?

1 个答案:

答案 0 :(得分:3)

您应该使用选择器,例如QMainWindow {background-color: green},其中QMainWindow是选择器。这样可以防止继承不需要的样式表。

另一个例子 - 自定义消息框:

QMessageBox {background-color: red; color : white}
  QMessageBox QPushButton {min-width: 50; min-height: 19}
  QMessageBox QLabel {color: white}

您可以将样式表放在.qss文件中,并在程序开始时全局阅读和应用。

您可以在The Style Sheet Syntax

中详细了解如何使用样式表