Qt中设置使用样式表的的注意事项.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Qt中设置使用样式表的的注意事项

Qt中设置widget背景颜色/图片的注意事项(使用样式表 setStyleSheet() 但是各种方法都有其注意事项,如果不注意则很容易陷入麻烦中。 1:setStyleSheet() 这个函数我一直很喜欢使用,因为只要写一句就可以实现效果,比其他方法都简单,但是其却有一个很值得注意的地方,也就是这个地方让我大吃苦头。 亦即:①:该函数只能用于设置有父窗口的子窗口的背景!如果一个窗口没有子窗口,则无法使用该函数来设置背景颜色或图 片!! ②:同时:对于一个父窗口而言:如果我们用setStyleShette设置了其样式,而对于其子窗口:如果没有用同样的函数来设 置的话, 则其子窗口的样式和其父窗口完全一致,亦即:其集成了自己父窗口的样式! ③:延伸:对顶层窗口(没有父窗口),其有若干个子窗口,则当我们用setStyleShette来设置这个顶层窗口的样式后,依据①可知:该父窗口本身没有任何变化,亦即设置没有生效;而其子窗口:只要子窗口本身没有用setStyleShette来设置自己的样式表,则其就是用的自己父窗口的样式表!! 例如: 主窗口(没有父类)为MainWin MainWin::MainWin() { this-setStyleSheet(background-image:url(:/bmp/IMG_0345.JPG)); iButton = new QPushButton(this); iLabel = new QLabel(iButton); } 运行一下,效果如下: 亦即:虽然我们设置的是顶层的父窗口,但是该样式却是在其子窗口中生效,而顶层父窗口没有任何变化! 这验证了①。 修改一下上例代码: MainWin::MainWin() { this-setStyleSheet(background-image:url(:/bmp/IMG_0345.JPG)); iButton = new QPushButton(this); iLabel = new QLabel(iButton); iLabel-setStyleSheet(background-image:url(:/bmp/1257253475842.jpg)); } 则运行效果如下: 可见:子窗口只有调用setStyleSheet()设置了自己的样式后才可以隔断父窗口的样式,否则其将是用父窗口的样式。 再修改一下代码: MainWin::MainWin() { iButton = new QPushButton(this); iButton -setStyleSheet(background-image:url(:/bmp/IMG_0345.JPG)); iLabel = new QLabel(iButton); } 运行一下,效果如下: 可见:设置有父窗口的子窗口时:setStyleSheet()一定生效!!! 后来我又思考了一个问题,那就是:对于顶层父窗口,如果我setStyleSheet()设置了样式表,而对其子窗口,我用其他方法,比如用QPalette调色板来设置背景图片/颜色,这时子窗口的背景到底是由继承自父窗口的样式表决定呢还是由子窗口本身的QPalette调色板决定呢? 再次修改代码: MainWin::MainWin() { this-setStyleSheet(background-image:url(:/bmp/IMG_0345.JPG)); iButton = new QPushButton(this); iLabel = new QLabel(iButton); QPalette palette; palette.setBrush(iLabel-backgroundRole(),QBrush(QImage(:/bmp/1257253475842.jpg))); iLabel-setPalette(palette); iLabel-setAutoFillBackground(true); } 此段代码中我用QPalette来设置子窗口的背景图片,看下到底是样式表还是调色板生效,效果如下 由此可见:一旦顶层窗口设置了样式表,则其子窗口无论用什么方法来设置背景,都会不生效!!! 那如果不是顶层窗口而仅仅是一般窗口设置了样式表呢?再次修改代码: MainWin::MainWin() { iButton = new QPushButton(this); iButton -setStyleSheet(back

文档评论(0)

ayangjiayu5 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档