Qt 样式表 - 未应用背景属性

Qt Style Sheets - Not Applied Background Properties

我正在尝试使用 Qt DesignerQt Creator 中创建一个自定义小部件(它本身包含一些子小部件)。

在设计器中,我将派生对象 ControlBarstyleSheet 属性 设置为以下值:

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 的每个子小部件的样式都按预期工作,但给定的背景颜色(background-color 属性 of ControlBar's styleSheet 特别是)不应用于控制栏,以及所有其他与背景相关的属性。相反,使用 MainWindow 的背景颜色和样式,而所有与子小部件相关的样式都按预期工作。

我怎样才能摆脱这种行为并使ControlBar具有预期的背景颜色?

QWidget#ControlBar引用对象名称为 "ControlBar" 的任何小部件。

  1. 您的小部件没有该对象名称。
  2. 由于某些原因,当对象名称与 class 名称相同时,这似乎不起作用,除非对象是根对象。

因此它可以在设计器和预览中工作,但不能作为其他东西的子项。

要解决此问题,请使用

ControlBar{
    background-color: #3a3a3a;
}

并确保从 QFrame 继承 ControlBar 而不是形成 QWidget。如果由于某种原因你不能,你必须覆盖 paintEvent。请参阅 this answer 了解确切代码。