FlK*_*lKo 6 css c++ qt qt-creator qt5
我正在尝试使用Qt Designer在Qt Creator中创建一个自定义窗口小部件(本身包含一些子窗口小部件).
在设计器中,我将派生对象的styleSheet属性设置为ControlBar以下值:
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;
}
Run Code Online (Sandbox Code Playgroud)
现在,在设计师和预览模式(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);
}
Run Code Online (Sandbox Code Playgroud)
尽管样式按照ControlBar的每个子窗口小部件的预期工作,但给定的背景颜色(特别是's styleSheet 的background-color属性ControlBar)不会应用于控件栏,以及所有其他与背景相关的属性.相反,使用了背景颜色和样式MainWindow,而所有与子窗口小部件相关的样式都按预期工作.
我怎样才能摆脱这种行为并使其ControlBar具有预期的背景颜色?
QWidget#ControlBar指任何具有对象名称"ControlBar"的窗口小部件.
因此它在设计师和预览中起作用,但不是作为其他东西的孩子.
要解决这个问题,请使用
ControlBar{
background-color: #3a3a3a;
}
Run Code Online (Sandbox Code Playgroud)
反而,确保继承ControlBar从QFrame,而不是形成QWidget.如果由于某种原因你不能,你必须覆盖paintEvent.请参阅此答案以获取确切的代码.