Qt 样式表 - 未应用背景属性
Qt Style Sheets - Not Applied Background Properties
我正在尝试使用 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 的每个子小部件的样式都按预期工作,但给定的背景颜色(background-color 属性 of ControlBar
's styleSheet 特别是)不应用于控制栏,以及所有其他与背景相关的属性。相反,使用 MainWindow
的背景颜色和样式,而所有与子小部件相关的样式都按预期工作。
我怎样才能摆脱这种行为并使ControlBar
具有预期的背景颜色?
QWidget#ControlBar
引用对象名称为 "ControlBar" 的任何小部件。
- 您的小部件没有该对象名称。
- 由于某些原因,当对象名称与 class 名称相同时,这似乎不起作用,除非对象是根对象。
因此它可以在设计器和预览中工作,但不能作为其他东西的子项。
要解决此问题,请使用
ControlBar{
background-color: #3a3a3a;
}
并确保从 QFrame
继承 ControlBar
而不是形成 QWidget
。如果由于某种原因你不能,你必须覆盖 paintEvent
。请参阅 this answer 了解确切代码。
我正在尝试使用 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 的每个子小部件的样式都按预期工作,但给定的背景颜色(background-color 属性 of ControlBar
's styleSheet 特别是)不应用于控制栏,以及所有其他与背景相关的属性。相反,使用 MainWindow
的背景颜色和样式,而所有与子小部件相关的样式都按预期工作。
我怎样才能摆脱这种行为并使ControlBar
具有预期的背景颜色?
QWidget#ControlBar
引用对象名称为 "ControlBar" 的任何小部件。
- 您的小部件没有该对象名称。
- 由于某些原因,当对象名称与 class 名称相同时,这似乎不起作用,除非对象是根对象。
因此它可以在设计器和预览中工作,但不能作为其他东西的子项。
要解决此问题,请使用
ControlBar{
background-color: #3a3a3a;
}
并确保从 QFrame
继承 ControlBar
而不是形成 QWidget
。如果由于某种原因你不能,你必须覆盖 paintEvent
。请参阅 this answer 了解确切代码。