Qt之QSS(Q PROPERTY 自定義屬性)

2021-08-09 10:27:48 字數 1302 閱讀 6126

在qt之qss(q_property-原始屬性)一節我們分享了q_property-原始屬性的用法,但通常情況下我們需要很多自定義樣式,例如:動態獲取qss樣式,這時自定義屬性就能很好的發揮其用武之地了。

更多參考

在使用qabstractitemmodel、qabstractitemdelegate更新**樣式的時候,比如:背景色、前景色等,我們通常的做法是定義一些顏色常量,然後根據不同的條件顯示不同的顏色,要麼就是通過qss全域性設定,讓所有的背景色、前景色保持一致。

這有乙個問題,侷限性太強,無法動態獲取顏色值,大大降低了程式的擴充套件性。

qabstractitemmodel、qabstractitemdelegate均繼承自qobject,而qss只能用於qwidget及其子孫類,那麼,如何動態獲採樣式屬性值呢?

三部曲:

其中,q_property宣告有以下要求:

建立乙個從qwidget繼承的專用類styledwidget,為其新增自定義屬性,並使用q_property宣告:

styledwidget.h

#ifndef styled_widget

#define styled_widget

#include

class styledwidget : public qwidget

;#endif // styled_widget

styledwidget.cpp

...

qcolor styledwidget::normalcolor() const

void styledwidget::setnormalcolor(qcolor color)

...

qss中使用自定義的屬性設定對應的樣式:

styledwidget

在需要設定樣式的類中宣告styledwidget:

class tablemodel : public qabstracttablemodel

;

使用自定義屬性設定樣式:

qvariant tablemodel::data(const qmodelindex &index, int role) const

...}

return qvariant();

}

QT之Qt之Q PROPERTY巨集理解

qt中的q property巨集在qt中是很常用的,那麼它有什麼作用呢?qt提供了乙個絕妙的屬性系統,q property 是乙個巨集,用來在乙個類中宣告乙個屬性property,由於該巨集是qt特有的,需要用moc進行編譯,故必須繼承於qobject類。q property type name r...

Qt系列 之Qt之打包發布

date 2019 1 31 發布方式 qt發布的時候,通常使用兩種方式 1 靜態編譯 2 動態編譯 靜態編譯 把相關聯的庫一併引入可執行程式,雖然發布簡單,但可執行程式較大。動態編譯 相關聯的庫,以dll的形式引用,不被包含進可執行程式,發布不方便,但可執行程式較小。靜態發布雖然不需要較多的dll...

Qt之QAbstractItemView右鍵選單

說起右鍵選單,之前qt之自定義qlineedit右鍵選單 這篇文章中我已經講述過3種右鍵選單的實現方式,今兒也是在囉嗦一下,針對qlistwidget類在定製一下右鍵選單,我使用的具體方式呢,是直接重寫了contextmenuevent方法,在這個方法中彈出右鍵選單。如圖1是針對qlistwidge...