当前位置:   article > 正文

Qt之Q_PROPERTY_qt 取消设置property

qt 取消设置property

Qt样式表分离中需要使用到Q_PROPERTY宏,在代码现在的版本中,使用样式表主要还是使用setStyleSheet(),但是考虑到后续样式表分离,使用QSS就不得不提及Q_PROPERTY了。
Qt Style Sheets Examples:
https://doc.qt.io/archives/qt-4.8/stylesheet-examples.html
Q_PROPERTY:
https://blog.csdn.net/liang19890820/article/details/51698536
https://doc.qt.io/archives/qt-4.8/qobject.html#Q_PROPERTY
https://doc.qt.io/archives/qt-4.8/properties.html#qt-s-property-system

Q_PROPERTY(type name
           READ getFunction
           [WRITE setFunction]
           [RESET resetFunction]
           [NOTIFY notifySignal]
           [DESIGNABLE bool]
           [SCRIPTABLE bool]
           [STORED bool]
           [USER bool]
           [CONSTANT]
           [FINAL])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

其中READ getFunction必须要实现,其他例如write/reset等函数随意,看具体需要的功能。一般会实现read,write和reset。

/// 官方例程
class MyClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
    Q_ENUMS(Priority)
public:
    MyClass(QObject *parent = 0);
    ~MyClass();
    enum Priority { High, Low, VeryHigh, VeryLow };
    void setPriority(Priority priority)
    {
        m_priority = priority;
        emit priorityChanged(priority);
    }
    Priority priority() const
    { return m_priority; }
signals:
    void priorityChanged(Priority);
private:
    Priority m_priority;
};
......
MyClass *myinstance = new MyClass;
QObject *object = myinstance;

myinstance->setPriority(MyClass::VeryHigh);
object->setProperty("priority", "VeryHigh");/*动态设置属性*/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

手工更新例程:

m_pMaximizeButton->setProperty("maximizeProperty", bMaximize ? "restore" : "maximize");
m_pMaximizeButton->style()->unpolish(m_pMaximizeButton);
m_pMaximizeButton->style()->polish(m_pMaximizeButton);
m_pMaximizeButton->update();
  • 1
  • 2
  • 3
  • 4

小demo:

// qsshelper.h/cpp
QString qsshelper::qssopen(const QString& filepath) /// 打开qss文件
{
    QFile qssfile(filepath);
    if(qssfile.exists()&&qssfile.open(QFile::ReadOnly))
    {
        str = QString(qssfile.readAll());
        qssfile.close();
    }
    return str;
}
// qsstest.h/cpp
/**更新按键的字体大小**/
void QThreadTest::updatePtnStyle()
{
    DssPBtn1->setProperty("font-size","20px");
    DssPBtn2->setProperty("font-size", "20px");
    DssPBtn1->style()->unpolish(DssPBtn1);
    DssPBtn1->style()->polish(DssPBtn1);
    DssPBtn2->style()->unpolish(DssPBtn2);
    DssPBtn2->style()->polish(DssPBtn2);
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/364855
推荐阅读
相关标签
  

闽ICP备14008679号