2009-10-20 63 views
17

Qtの動的プロパティは実際にスタイルシートで非常に動的ですか?Qtのスタイルシートは本当に_dynamic_プロパティを扱っていますか?

私はスタイルシートとダイナミックな特性から、基本的な例があります。

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

をそして、私はこのどこかのコードでは、実行時に起こっている:このプロパティはUI、中

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

何も変更を実行時に変更されました。

プロパティを変更するときにQtのスタイルシートエンジンを更新するために何をしなければならないのですか、あるいはこの種のケースを処理する能力があるのでしょうか?

Btw。私はQt 4.4を使用しています

+0

たぶん、あなたはそれをする必要がありますQ_PROPERTY? – cheez

答えて

6

ウィジェットのスタイリングを更新するために少しハックされていましたが、素早く見つかりました。

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

プロパティを変更した後にこれを行うと、プロパティデータとUIが関連付けられます。

+0

これはPyQt 4.7.2(Qt 4.6.2) のTon van den Heuvelの提案で私にとってはうまくいきませんでした。 –

+0

これは私のために働く!私はQt 4.7を実行しており、 'QWidget :: setEnabled(bool)'を介して "enabled"プロパティを変更しても対応する '[enabled =" false "]'と '[enabled = "true"] 'スタイルシートのセクション。上記を使用して魅力的なように働いた。私は 'rePolish(QWidget *)'関数でそれらをラップして、有効な状態が変わるたびに、コード全体を通してその関数への呼び出しを呼び起こしました。 – kurige

+1

サイドノートとして:上記の答えを落とした人は誰でも... "私のためにはうまくいかない"というのは、一般的にdownvoteするのに十分な理由ではありません。 – kurige

2

私は運もなくこれを試しましたが、ドキュメントで次のテキストが見つかったら、私は諦めました。 The Style Sheet Syntaxを参照してください:

警告:スタイルシート 後のQt プロパティの値が変更されたが設定されている場合、それは 力スタイルシートの再計算が必要になる場合があります。 1つの これを実現する方法は、 スタイルシートを解除してもう一度設定することです。

3

私はウィジェットの適切なモデルチェンジを確保するため、次の作品:

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

MDCLによって提案されたようにスタイルシートの再計算を強制は私のために動作しませんでした。 Qt 4.5.3を使用しています。

+0

これはPyQt 4.7を使って私にとってはうまくいきました。2(Qt 4.6.2)。 このようなことがうまくいかないというのは本当に残念です。 あなたは単にensurePolished()を呼び出すだけで済みます。 –

18

QtはそのFAQで、次の推奨事項があります。

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

は、彼らはまた、あなたが次の操作を行って、スタイルシートをリセットすることができると言うが、それはより高価です:

setStyleSheet(styleSheet()); 
関連する問題