设置QFrame的样式
Setting the style of QFrame
我有一个标题为 'bannerframe' 的 QFrame,它与其他小部件一起嵌入到对话框中。
我想动态改变相框的背景。如果我使用顶层对话框 (MessageDlg) 中定义的样式表,它会正确显示,如下所示:-
样式表定义为
#bannerFrame
{
background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0,
stop:0 rgba(195, 40, 9, 255),
stop:0.7 rgba(225, 121, 113, 255),
stop:1 rgba(237, 154, 152, 255));
}
但是,如果我删除它并将样式直接添加到 bannerframe 小部件,渐变似乎无法正常工作:-
无论在设计器中还是在代码中设置样式表,都会看到相同的效果:
QString style = QString("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0,\
stop:0 rgba(%1, %2, %3, 255),\
stop:1 rgba(%4, %5, %6, 255));").arg(red1).arg(green1).arg(blue1).arg(red2).arg(green2).arg(blue2);
ui->bannerFrame->setStyleSheet(style);
那么,这是怎么回事?
当直接在框架上而不是在 top-level 对话框上设置样式表时,为什么渐变不能在框架的小部件周围正常工作?
这可能是因为框架中的小部件将继承其父级样式表。所以你看到的是带有渐变背景图标的 QLabel 小部件。添加一个选择器来限制您的样式应该应用到的小部件。
QString style = QString("QFrame {...}");
或
QString style = QString("QFrame#bannerFrame {...}");
我也不得不处理这个问题,直到我发现 Qt 样式是由设置样式的最后一行决定的。这意味着如果你有
something->setStyleSheet(Style1);
something->setStyleSheet(Style2);
something->setStyleSheet(Style3);
只有样式 3 会保留(如果它们相等但值在变化。如果存在差异,即 style1 将文本设为粗体,而 style2 将文本设为 14 号,它们都可以工作,但如果 style3 表示文本大小为17,那就17了。
为避免这种情况并能够为每种类型的小部件更改它,您需要为该样式的用户定义:
generallayout->setStyleSheet("NAME{css_code}");
喜欢:
myLayout->setStyleSheet("QLineEdit{background-color:#ff0066"};
只有 LineEdits 才会有那个背景。在您的情况下,您只需要根据需要使用 QFrame 或 QFrame#bannerFrame。
我有一个标题为 'bannerframe' 的 QFrame,它与其他小部件一起嵌入到对话框中。
我想动态改变相框的背景。如果我使用顶层对话框 (MessageDlg) 中定义的样式表,它会正确显示,如下所示:-
样式表定义为
#bannerFrame
{
background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0,
stop:0 rgba(195, 40, 9, 255),
stop:0.7 rgba(225, 121, 113, 255),
stop:1 rgba(237, 154, 152, 255));
}
但是,如果我删除它并将样式直接添加到 bannerframe 小部件,渐变似乎无法正常工作:-
无论在设计器中还是在代码中设置样式表,都会看到相同的效果:
QString style = QString("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0,\
stop:0 rgba(%1, %2, %3, 255),\
stop:1 rgba(%4, %5, %6, 255));").arg(red1).arg(green1).arg(blue1).arg(red2).arg(green2).arg(blue2);
ui->bannerFrame->setStyleSheet(style);
那么,这是怎么回事?
当直接在框架上而不是在 top-level 对话框上设置样式表时,为什么渐变不能在框架的小部件周围正常工作?
这可能是因为框架中的小部件将继承其父级样式表。所以你看到的是带有渐变背景图标的 QLabel 小部件。添加一个选择器来限制您的样式应该应用到的小部件。
QString style = QString("QFrame {...}");
或
QString style = QString("QFrame#bannerFrame {...}");
我也不得不处理这个问题,直到我发现 Qt 样式是由设置样式的最后一行决定的。这意味着如果你有
something->setStyleSheet(Style1);
something->setStyleSheet(Style2);
something->setStyleSheet(Style3);
只有样式 3 会保留(如果它们相等但值在变化。如果存在差异,即 style1 将文本设为粗体,而 style2 将文本设为 14 号,它们都可以工作,但如果 style3 表示文本大小为17,那就17了。
为避免这种情况并能够为每种类型的小部件更改它,您需要为该样式的用户定义:
generallayout->setStyleSheet("NAME{css_code}");
喜欢:
myLayout->setStyleSheet("QLineEdit{background-color:#ff0066"};
只有 LineEdits 才会有那个背景。在您的情况下,您只需要根据需要使用 QFrame 或 QFrame#bannerFrame。