Qt软件换肤实现之自定义属性

前面介绍了Qt实现软件换肤的流程,基本的换肤操作已经ok了。但是有些控件(如QAbstractItemModel、QAbstractItemDelegate更新表格样式的时候)无法通过指定的控件获取到样式或者原始属性无法满足需求,此时自定义属性就可以发挥作用了,通过自定义属性动态获取样式。
那么如何设置自定义属性并应用呢?

本文介绍qss自定义属性设置与使用

qss只能用于QWidget及其子孙类

  • 一、创建一个继承于QWidget的类QStyledWidget
  • 二、为QStyleWidget添加自定义属性,并使用Q_PROPERTY声明
  • 三、自定义qss,并使用属性,语法:

    1
    qproperty-<property name>: "";//值可以为Json类型
  • 四、 从qss获取并使用自定义属性

    1
    2
    QStyledWidget->property("property name").toString();
    //就可以取到qss内设置的值

示例:
QStyledWidget.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef QSTYLED_WIDGET
#define QSTYLED_WIDGET

#include <QWidget>

class QStyledWidget : public QWidget
{
Q_OBJECT
Q_PROPERTY(QString customeProperty READ customeProperty WRITE setCustomeProperty)
public:
explicit QStyledWidget(QWidget *parent = 0);
~QStyledWidget();

QString customeProperty() const;
void setCustomeProperty(QString strProperty);
private:
QString m_strProperty;
};

#endif //QSTYLED_WIDGET

QStyleWidget.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <qstyledwidget.h>
QStyledWidget::QStyledWidget(QWidget *parent)
:QWidget(parent)
{
}
QStyledWidget:~QStyledWidget()
{
}
QString customeProperty() const
{
return m_strProperty;
}
void setCustomeProperty(QString strProperty)
{
m_strProperty = strProperty;
}

lasyman wechat
-------------本文结束感谢您的阅读-------------