简述
QWidget默认是白色的背景,在实际的应用中我们经常为它设置好看的背景图片来达到
美化软件的效果。
实现方式
- 通过SetPalette来设置背景图片
- QSS
- QPainter来绘制
SetPalette设置背景
源码
setAutoFillBackground(true);
QPixmap pixmap(":/bj");
QPalette palette;
palette.setBrush(QPalette::Window, QBrush(pixmap));
setPalette(palette);
resize(pixmap.size());
QSS设置背景
setStyleSheet("border-image:url(:/bj);");
附加问题
如果你的控件是继承自QWidget的,会出现setStyleSheet没有效果。这是由于QWidget的
painterEvent函数是空的原因,你需要自己添加函数或者是控件继承QFrame。
void paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
QPainter来绘制
通过painterEvent函数将背景图片绘制到控件的区域。
void Widget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
painter.setPen(Qt::NoPen);
painter.drawPixmap(rect(), QPixmap(":/bj"));
}
扩展
通过QPainter的绘制图片,我们可以通过一个局部变量来保存背景图片得路径,每次设置
图片后update(),就可重新绘制背景图片。
void Widget::setPixmapName(const QString &pixmapName)
{
m_pixmapName = pixmapName;
update();
}
void Widget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
painter.setPen(Qt::NoPen);
painter.drawPixmap(rect(), QPixmap(m_pixmapName));
}