我尝试使用 Qt Designer 在 Qt Creator 中创建自定义窗口小部件(本身包含一些子窗口小部件)。
在设计器中,我将派生对象ControlBar
的 styleSheet 属性设置为以下值:
QWidget{
font-family: "Segoe UI";
font-size: 9;
}
QWidget#ControlBar{
background-color: #3a3a3a;
border-width: 5px;
border-radius: 4px;
border-style: solid;
border-color: #ffffff;
}
现在设计师和预览模式( Shift + Alt + R )中的一切看起来都很好。
我现在的意图是在运行时创建ControlBar
的实例并将其分配给MainWindow
实例的主垂直布局:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ControlBar *controlBar = new ControlBar;
ui->verticalLayout->insertWidget(0, controlBar);
}
虽然样式按照预期为 ControlBar 的每个子窗口小部件工作,但给定的背景颜色(ControlBar
&#的背景颜色属性39;特别是s styleSheet)不适用于控制栏,以及所有其他与背景相关的属性。相反,使用了MainWindow
的背景颜色和样式,而所有与子窗口小部件相关的样式都按预期工作。
如何摆脱这种行为并让ControlBar
拥有预期的背景颜色?
答案 0 :(得分:6)
QWidget#ControlBar
指的是对象名称为“ControlBar”的任何窗口小部件。
因此它在设计师和预览中起作用,但不是其他东西的孩子。
要解决此问题,请使用
ControlBar{
background-color: #3a3a3a;
}
而是确保从ControlBar
继承QFrame
而不是QWidget
。如果由于某种原因你不能,则必须覆盖paintEvent
。有关确切代码,请参阅this answer。