Qt设置窗体背景

来源:互联网 发布:健身教材 知乎 编辑:程序博客网 时间:2024/06/07 04:42

  • 简述
  • 实现方式
  • SetPalette设置背景
    • 源码
  • QSS设置背景
    • 附加问题
  • QPainter来绘制
    • 扩展

简述

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));}
0 0
原创粉丝点击