QWidget使用qss样式的background-image属性

    最近在学习Qt使用QSS样式美化窗口部件的内容。发现在对QWidget应用background-image改变窗口背景图片时,QWidget的窗口背景并未生效。工程建立如下:
    1、新建 Qt Application 工程

            

103613_zU3m_2305784.png

    2、窗口选择从 QWidget 继承

            

103644_SAHR_2305784.png

    3、最后生成的工程目录

            

103722_P5s9_2305784.png

    4、工程源文件如下

        main.cpp

#include "qwdg_backimage.h"
#include <QtGui/QApplication>
int main(int argc, char *argv[])
{
 QApplication a(argc, argv);
 QWdg_backImage w;
 w.show();
 return a.exec();
}

        qwdg_backImage.h

#ifndef QWDG_BACKIMAGE_H
#define QWDG_BACKIMAGE_H
#include <QtGui/QWidget>
#include "ui_qwdg_backimage.h"
class QWdg_backImage : public QWidget
{
 Q_OBJECT
public:
 QWdg_backImage(QWidget *parent = 0, Qt::WFlags flags = 0);
 ~QWdg_backImage();
private:
 Ui::QWdg_backImageClass ui;
};
#endif // QWDG_BACKIMAGE_H

        qwdg_backImage.cpp

#include "qwdg_backimage.h"
QWdg_backImage::QWdg_backImage(QWidget *parent, Qt::WFlags flags)
 : QWidget(parent, flags)
{
 ui.setupUi(this);

}
QWdg_backImage::~QWdg_backImage()
{
}

    5、加入做为背景的图片资源

        

104145_VjGG_2305784.png

    6、修改 继承的QWidget子类

        qwdg_backImage.cpp

#include "qwdg_backimage.h"
QWdg_backImage::QWdg_backImage(QWidget *parent, Qt::WFlags flags)
 : QWidget(parent, flags)
{
 ui.setupUi(this);
 // 这里是添加的背景图片
 // 背景图片已事先添加入 qwdg_backimage.qrc 文件
 setStyleSheet(tr("background-image: url(:/images/background.png)"));
}
QWdg_backImage::~QWdg_backImage()
{
}

    7、编译运行

        

104650_Hi4x_2305784.png

咦,这时发现继承自QWidget的qwdg_backImage子类背景并未改变为构造函数里的图片背景。

解决办法如下:

1、修改 qwdg_backImage.h头文件,添加入 paintEvent 事件。

#ifndef QWDG_BACKIMAGE_H
#define QWDG_BACKIMAGE_H
#include <QtGui/QWidget>
// 新添加的头文件
#include <QPainter>
#include "ui_qwdg_backimage.h"
class QWdg_backImage : public QWidget
{
 Q_OBJECT
public:
 QWdg_backImage(QWidget *parent = 0, Qt::WFlags flags = 0);
 ~QWdg_backImage();
 // 此处加入 paintEvent 事件
protected:
 void paintEvent(QPaintEvent *event);
private:
 Ui::QWdg_backImageClass ui;
};
#endif // QWDG_BACKIMAGE_H

2、修改qwdg_backImage.cpp源文件,实现 paintEvent 事件。

#include "qwdg_backimage.h"
QWdg_backImage::QWdg_backImage(QWidget *parent, Qt::WFlags flags)
 : QWidget(parent, flags)
{
 ui.setupUi(this);
 // 这里是添加的背景图片
 // 背景图片已事先添加入 qwdg_backimage.qrc 文件
 setStyleSheet(tr("background-image: url(:/images/background.png)"));
}
QWdg_backImage::~QWdg_backImage()
{
}
// 此处实现 paintEvent 事件
void QWdg_backImage::paintEvent(QPaintEvent *event)
{
 QStyleOption  opt;
 opt.init(this);
 QPainter  p(this);
 style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

再次编译运行:

105451_uxc6_2305784.png

总结:

1、QSS样式的语法和CSS样式的语法类似。

2、Qt的窗口部件可以直接应用QSS样式做出界面美化的工作,应用QSS样式有多种方法,其中一种就如本文件使用 setStyleSheet 函数

3、QWidget是可以直接用QSS样式的background-image属性的,但如果象本文生成的qwdg_backimage继承自QWidget的子类,在应用background-image属性时,必须实现重绘事件,即 paintEvent 事件。

转载于:https://my.oschina.net/RecreateByOneself/blog/366772

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值