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

6
我将尝试在Qt Creator中使用Qt Designer创建一个自定义小部件(包含一些子小部件)。
在设计师中,我将派生对象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样式表中的background-color属性)未应用于控制栏,以及所有其他与背景相关的属性。相反,使用了MainWindow的背景颜色和样式,而所有与子部件相关的样式都按预期工作。
我该如何消除这种行为并使ControlBar具有其预期的背景颜色?

{btsdaf} - SteakOverflow
1个回答

7

QWidget#ControlBar指的是具有对象名称“ControlBar”的任何小部件。

  1. 您的小部件没有该对象名称。
  2. 由于某种原因,当对象名称与类名称相同时,除了根对象之外,似乎不起作用。

因此,它在设计师和预览中起作用,但不作为其他内容的子项。

要解决此问题,请使用

ControlBar{
    background-color: #3a3a3a;
}

请确保继承ControlBar时从QFrame而不是QWidget继承。如果由于某种原因无法这样做,则必须覆盖paintEvent。参见此答案以获取精确代码。


2
{btsdaf} - FlKo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接