欢迎来到天天文库
浏览记录
ID:15436312
大小:171.50 KB
页数:7页
时间:2018-08-03
《qt中设置使用样式表的注意事项》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Qt中设置widget背景颜色/图片的注意事项(使用样式表setStyleSheet()在Qt中设置widget背景颜色或者图片方法很多种:重写paintEvent(),调色板QPalette,样式表setStyleSheet等等。但是各种方法都有其注意事项,如果不注意则很容易陷入麻烦中。1:setStyleSheet()这个函数我一直很喜欢使用,因为只要写一句就可以实现效果,比其他方法都简单,但是其却有一个很值得注意的地方,也就是这个地方让我大吃苦头。亦即:①:该函数只能用于设置有父窗口的子窗口的背景!如果一个窗口没有子窗口,则无法使用该函数来设置背景颜色或图片!!②
2、:同时:对于一个父窗口而言:如果我们用setStyleShette设置了其样式,而对于其子窗口:如果没有用同样的函数来设置的话,则其子窗口的样式和其父窗口完全一致,亦即:其集成了自己父窗口的样式!③:延伸:对顶层窗口(没有父窗口),其有若干个子窗口,则当我们用setStyleShette来设置这个顶层窗口的样式后,依据①可知:该父窗口本身没有任何变化,亦即设置没有生效;而其子窗口:只要子窗口本身没有用setStyleShette来设置自己的样式表,则其就是用的自己父窗口的样式表!!例如:主窗口(没有父类)为MainWinMainWin::MainWin(){this->
3、setStyleSheet("background-image:url(:/bmp/IMG_0345.JPG)");iButton=newQPushButton(this);iLabel=newQLabel(iButton);}运行一下,效果如下:亦即:虽然我们设置的是顶层的父窗口,但是该样式却是在其子窗口中生效,而顶层父窗口没有任何变化!这验证了①。修改一下上例代码:MainWin::MainWin(){this->setStyleSheet("background-image:url(:/bmp/IMG_0345.JPG)");iButton=newQPushBut
4、ton(this);iLabel=newQLabel(iButton);iLabel->setStyleSheet("background-image:url(:/bmp/1257253475842.jpg)");}则运行效果如下:可见:子窗口只有调用setStyleSheet()设置了自己的样式后才可以隔断父窗口的样式,否则其将是用父窗口的样式。再修改一下代码:MainWin::MainWin(){iButton=newQPushButton(this);iButton->setStyleSheet("background-image:url(:/bmp/IMG_03
5、45.JPG)");iLabel=newQLabel(iButton);}运行一下,效果如下:可见:设置有父窗口的子窗口时:setStyleSheet()一定生效!!!后来我又思考了一个问题,那就是:对于顶层父窗口,如果我setStyleSheet()设置了样式表,而对其子窗口,我用其他方法,比如用QPalette调色板来设置背景图片/颜色,这时子窗口的背景到底是由继承自父窗口的样式表决定呢还是由子窗口本身的QPalette调色板决定呢?再次修改代码:MainWin::MainWin(){this->setStyleSheet("background-image:url
6、(:/bmp/IMG_0345.JPG)");iButton=newQPushButton(this);iLabel=newQLabel(iButton);QPalettepalette;palette.setBrush(iLabel->backgroundRole(),QBrush(QImage(":/bmp/1257253475842.jpg")));iLabel->setPalette(palette);iLabel->setAutoFillBackground(true);}此段代码中我用QPalette来设置子窗口的背景图片,看下到底是样式表还是调色板生效,效
7、果如下由此可见:一旦顶层窗口设置了样式表,则其子窗口无论用什么方法来设置背景,都会不生效!!!那如果不是顶层窗口而仅仅是一般窗口设置了样式表呢?再次修改代码:MainWin::MainWin(){iButton=newQPushButton(this);iButton->setStyleSheet("background-image:url(:/bmp/IMG_0345.JPG)");iLabel=newQLabel(iButton);QPalettepalette;palette.setBrush(iLabel->backgroundR
此文档下载收益归作者所有