Qt设置窗体背景

简述

QWidget默认是白色的背景,在实际的应用中我们经常为它设置好看的背景图片来达到
美化软件的效果。

实现方式

  1. 通过SetPalette来设置背景图片
  2. QSS
  3. 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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值