2009-10-20 22 views
17

Qt的動態屬性對於樣式表是否真的如此動態?Qt的樣式表是否真正處理_dynamic_屬性?

我從樣式表和動態性能的基本的例子:

/*stylesheet:*/ 
*[field_mandatory="true"] { background-color: "yellow";} 

我有這種情況發生在運行時代碼中的某處:

/*code:*/ 
myWidget->setProperty("field_mandatory", field->isFilled()); 

沒有在UI的變化,當這個屬性變在運行時更改。

有沒有人有想法在更改屬​​性時更新Qt的樣式表引擎必須做什麼,或者它是否能夠處理這些類型的案例?

Btw。我正在使用Qt 4.4

+0

也許你需要它一個Q_PROPERTY? – cheez 2009-10-20 16:24:10

回答

6

我發現了一個快速的,雖然有點怪異的方式來更新小部件的樣式。

myWidget->style()->unpolish(myWidget); 
myWidget->ensurePolished(); 

更改屬性後執行此操作會使屬性數據和UI保持關聯。

+0

這對我來說並不適用於PyQt 4.7.2(Qt 4.6.2) 噸van den Heuvel的建議做到了。 – 2010-07-29 21:59:43

+0

這適用於我!我正在運行Qt 4.7,通過'QWidget :: setEnabled(bool)'改變到「enabled」屬性並沒有通過相應的'[enabled =「false」]和'[enabled =樣式表中的「true」]部分。使用上面的工作就像一個魅力。我只是將它們封裝在'rePolish(QWidget *)'函數中,並且在啓用狀態更改的任何地方通過代碼對該函數進行了調用。 – kurige 2010-11-08 10:09:29

+1

作爲一個側面說明:誰低估了上面的答案......「這對我不起作用」通常不是一個足夠理由來downvote。 – kurige 2010-11-08 10:10:05

2

我也試過這個,沒有運氣,當我在文檔中找到以下文本時,我放棄了。見The Style Sheet Syntax

警告:如果樣式表 後的Qt 屬性值更改已定,這可能需要 力的樣式表重新計算。一種 實現此目的的方法是取消設置 樣式表並重新設置。

3

對我來說,下面的工程,以確保小部件的正確改型:

myWidget->setStyle(QApplication::style())

強制提議MDCL我沒有工作的樣式表的重新計算。我正在使用Qt 4.5.3。

+0

這對我使用的是PyQt 4.7。2(Qt 4.6.2)。 一個真正的恥辱,這種東西不工作如此好。 你應該可以直接調用ensurePolished()並完成它。 – 2010-07-29 22:01:01

18

Qt擁有他們FAQ以下建議:

style()->unpolish(theWidget); 
style()->polish(theWidget); 

他們也說,你可以通過執行重置樣式表下面的卻是更加昂貴:

setStyleSheet(styleSheet());