第一次使用qss的时候会遇到奇奇怪怪的问题,比如新建一个窗口类继承自QWidget,设置样式表却怎么也不生效。仔细查看了Qt文档后才发现端倪。如下图所示:
文档里面说,QWidget仅仅支持background
,background-clip
和background-origin
属性(其实和不支持qss也没差多少…)。如果你继承自QWidget自定义一个窗口,那么你需要重写 paintEvent
事件,当然文档里已经给你写好了,直接粘贴进去就可以了。下面列一份代码段:
customwidget.h
#ifndef CUSTOMWIDGET_H
#define CUSTOMWIDGET_H
#include <QWidget>
class CustomWidget : public QWidget
{
Q_OBJECT
public:
explicit CustomWidget(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent* event) override;
signals:
};
#endif // CUSTOMWIDGET_H
customwidget.cpp
#include "customwidget.h"
#include <QStyleOption>
#include <QPainter>
CustomWidget::CustomWidget(QWidget *parent) : QWidget(parent)
{
}
void CustomWidget::paintEvent(QPaintEvent *event)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
还有一点,就是Warning中提到的,Q_OBJECT
宏要记得加上