我有一个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));
}但是,如果删除它并将样式直接添加到班纳框架小部件中,则渐变似乎不能正常工作:-

无论在设计器中还是在代码中设置样式表,都可以看到同样的效果:
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);这是怎么回事?
为什么当样式表直接设置在框架上,而不是在顶层对话框上时,渐变不能正确地围绕框架的小部件工作?
发布于 2015-07-22 13:45:36
这可能是因为框架中的小部件将继承它们的父样式表。因此,您看到的是具有渐变背景的图标的QLabel小部件。添加一个选择器来限制您的样式应该应用到的小部件。
QString style = QString("QFrame {...}");或
QString style = QString("QFrame#bannerFrame {...}");发布于 2015-07-22 13:57:58
我也必须处理这个问题,直到我发现Qt风格是由设置样式的最后一行决定的。这意味着如果你
something->setStyleSheet(Style1);
something->setStyleSheet(Style2);
something->setStyleSheet(Style3);只有样式3将保留(如果它们是平等的,但不断变化的价值。如果存在差异,例如style1将文本放在Bold中,而style2将文本设置为14大小,则两者都能工作,但如果style3说文本大小为17,则为17。
为了避免这种情况,并能够对每种类型的小部件进行更改,您需要定义该样式是谁:
generallayout->setStyleSheet("NAME{css_code}");像这样:
myLayout->setStyleSheet("QLineEdit{background-color:#ff0066"}; 只有LineEdits才会有这样的背景。在您的情况下,您只需要根据需要使用QFrame或QFrame#bannerFrame即可。
https://stackoverflow.com/questions/31564621
复制相似问题