Qt界面设置背景(借鉴他人) 您所在的位置:网站首页 qt登录界面背景 Qt界面设置背景(借鉴他人)

Qt界面设置背景(借鉴他人)

2023-12-31 00:57| 来源: 网络整理| 查看: 265

      1.在学习的过程中一个问题:主界面跳转子窗口,发现子窗口背景图片没有了。我的背景图是直接通过样式表设置的。运行后,不起作用,于是想到直接在代码中设置。

      2.贴出找到的解决方法:(在此感谢@滴水穿石,红色部分是我解决问题应用代码)

窗口背景无非两种:背景色、背景图片。Qt中窗口背景如何设置?下面介绍三种方法: 一、 QPalette设置背景 二、实现paintEvent,使用QPainter来绘制背景 三、使用QSS来设置背景     关于QSS的使用不想多说,一般我不用QSS设置窗口背景,也不建议使用。( 注意: 这里是对于窗口而言)。如果是子部件当然可以。因为窗口使用QSS设置背景之后,若子部件不使用同样的方式来设置,默认则会继承父窗口的样式     子部件一般情况下也 不需要设置背景图片,即使需要使用QSS也完全可以满足。设置较多的是背景色与图标,QSS中使用background或者background-color的方式可以实现背景色的设置,图标则可以使用setPixmap或者setIcon来设置!     下面介绍 QPalette以及 paintEvent 一、QPalette设置背景 构造函数中可以使用如下方式: (1)设置背景色 QPalette  palette (this->palette()); palette.setColor(QPalette::Background, Qt::black); this->setPalette( palette );   或: QPalette palette; palette.setBrush(this->backgroundRole(), Qt::black); this->setPalette(palette);  这里 setColor 和setBrush都可以使用! (2)设置背景图片   QPixmap pixmap = QPixmap(":/qm/safe").scaled(this->size()); QPalette  palette (this->palette()); palette .setBrush(QPalette::Background, QBrush(pixmap)); this-> setPalette( palette );       上面方式无论设置背景色还是背景图片QPalette::Background与this->backgroundRole()是等价的! 二、paintEvent设置背景 (1)设置背景色 void IIIMark::paintEvent(QPaintEvent *) {     QPainter painter(this);     painter.setBrush(Qt::black);     painter.drawRect(this->rect()); } (2)设置背景图片 void IIIMark::paintEvent(QPaintEvent *) {     QPixmap pixmap = QPixmap(":/qm/safe").scaled(this->size());     QPainter painter(this);     painter.drawPixmap(this->rect(), pixmap); }      注意:   (1)以上都是用 scaled方式对图片进行了适应窗口大小的设置,因为所给的图片大小不一定满足要求,所以采用此方式!当然图片经过拉伸或者压缩之后会变形(纯色图片除外),所以对图片采用此方式时需要注意。   (2)设置背景范围的时候如果需要充满整个窗口最好使用this->rect(),因为我看到很多人在使用QRect(0, 0, 400, 400)之类的语句,那么如果窗口大小改变了呢?此句是不是要跟着变呢?   (3)如果需要背景图片或者背景色随可以发生改变时,也就是所谓的换肤功能,则采用paintEvent的方式,在需要改变的时候使用update()来进行更新。   (4)this->setAutoFillBackground(true)又让我想起了tr(),被很多人滥用。这句话在什么时候使用呢?不妨采用QPalette设置背景的方式加上与去掉这句话对比一下(在有父窗口的情况下使用)。如果这个QWidget直接show,则有背景色,如果放到一个父窗口中,就没有效果。添加该句即可!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有