标签:qt 5 stylesheet 样式表
从 QWidget 派生一个窗口,使用 stylesheet 设置背景,designer 设置没有问题,或者,通过 setStyleSheet() 设置,代码操作是正确的,编译运行后,却没有背景。
下面为验证例子(通过代码验证,没有使用 designer ):
工程目录结构如下:
mywidget.h 示例代码如下:
#ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> class MyWidget : public QWidget { Q_OBJECT public: MyWidget(QWidget *parent = 0); ~MyWidget(); }; #endif // MYWIDGET_H
#include "mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { // 通过样式表给窗口设置背景图 // "MyWidget" 为类名 // "../test/test.jpg": 为图片路径,相对于可执行程序的相对路径 this->setStyleSheet(".MyWidget{background-image: url(../test/test.jpg);} "); } MyWidget::~MyWidget() { }
#include "mywidget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWidget w; w.show(); return a.exec(); }
原因是,QWidget 的 paintEvent() 是空的,而样式表要通过 paint 被绘制到窗口中,我们需要重新写 paintEvent() 函数,才能够真正实现继承。
解决办法如下:
mywidget.h 添加如下代码:
//.h文件 // 增加 paintEvent() 的声明 protected: void paintEvent(QPaintEvent *); //重写paintEvent()
mywidget.cpp 添加如下代码:
// .cpp 文件 // 重写paintEvent() void MyWidget::paintEvent(QPaintEvent *) { QStyleOption opt; // 需要头文件#include <QStyleOption> opt.init(this); QPainter p(this); // 需要头文件#include <QPainter> style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); }
重新编译运行,发现背景图设置成功:
本教程示例代码下载请点此链接:http://download.csdn.net/detail/tennysonsky
参考资料:http://blog.csdn.net/dbzhang800
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:qt 5 stylesheet 样式表
原文地址:http://blog.csdn.net/tennysonsky/article/details/46653571