专业建站公司的业务内容有哪些,用户上传网站用什么做,网站建设seo虾哥网络,想做网络推广如何去做窗口背景无非两种#xff1a;背景色、背景图片。Qt中窗口背景如何设置#xff1f;
一、QPalette设置背景
二、实现paintEvent#xff0c;使用QPainter来绘制背景
三、使用QSS来设置背景 关于QSS的使用不想多说#xff0c;一般我不用QSS设置窗口背景#xff0c;也不建议…窗口背景无非两种背景色、背景图片。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()来进行更新。 4this-setAutoFillBackground(true)又让我想起了tr()被很多人滥用。这句话在什么时候使用呢不妨采用QPalette设置背景的方式加上与去掉这句话对比一下在有父窗口的情况下使用。如果这个QWidget直接show则有背景色如果放到一个父窗口中就没有效果。添加该句即可