首页 技术 正文
技术 2022年11月10日
0 收藏 858 点赞 3,057 浏览 2524 个字

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

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

2、窗口选择从 QWidget 继承

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

3、最后生成的工程目录

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

4、工程源文件如下

main.cpp

?

123456789 #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

?

1234567891011121314 #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

?

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

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

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

6、修改 继承的QWidget子类

qwdg_backImage.cpp

?

123456789101112 #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、编译运行

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

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

解决办法如下:

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

?

12345678910111213141516171819 #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 事件。

?

1234567891011121314151617181920 #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); }

再次编译运行:

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

总结:

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

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,494
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,295