首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置QFrame样式

设置QFrame样式
EN

Stack Overflow用户
提问于 2015-07-22 13:30:17
回答 2查看 2.2K关注 0票数 0

我有一个QFrame,名为“班纳框架”,嵌入在对话框中,还有其他小部件。

我想动态地改变帧的背景。如果我使用在顶层对话框(MessageDlg)中定义的样式表,它将正确显示,如下所示:-

样式表定义为

代码语言:javascript
复制
#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));
}

但是,如果删除它并将样式直接添加到班纳框架小部件中,则渐变似乎不能正常工作:-

无论在设计器中还是在代码中设置样式表,都可以看到同样的效果:

代码语言:javascript
复制
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);

这是怎么回事?

为什么当样式表直接设置在框架上,而不是在顶层对话框上时,渐变不能正确地围绕框架的小部件工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-22 13:45:36

这可能是因为框架中的小部件将继承它们的父样式表。因此,您看到的是具有渐变背景的图标的QLabel小部件。添加一个选择器来限制您的样式应该应用到的小部件。

代码语言:javascript
复制
QString style = QString("QFrame {...}");

代码语言:javascript
复制
QString style = QString("QFrame#bannerFrame {...}");
票数 1
EN

Stack Overflow用户

发布于 2015-07-22 13:57:58

我也必须处理这个问题,直到我发现Qt风格是由设置样式的最后一行决定的。这意味着如果你

代码语言:javascript
复制
something->setStyleSheet(Style1);
something->setStyleSheet(Style2);
something->setStyleSheet(Style3);

只有样式3将保留(如果它们是平等的,但不断变化的价值。如果存在差异,例如style1将文本放在Bold中,而style2将文本设置为14大小,则两者都能工作,但如果style3说文本大小为17,则为17。

为了避免这种情况,并能够对每种类型的小部件进行更改,您需要定义该样式是谁:

代码语言:javascript
复制
generallayout->setStyleSheet("NAME{css_code}");

像这样:

代码语言:javascript
复制
 myLayout->setStyleSheet("QLineEdit{background-color:#ff0066"}; 

只有LineEdits才会有这样的背景。在您的情况下,您只需要根据需要使用QFrame或QFrame#bannerFrame即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31564621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档