2016-04-25 11 views
1

私のウィンドウのロードイベントでは、rootObject()(これはQQuickItem)にアクセスしており、これを使用して自分のQMLファイルで定義されたコントロールへの参照を取得しています。私はこのコードを使用してプログラムでコントロールの色を設定/変更します:Qtコントロールの無効状態の色をプログラムで設定する方法はありますか?

object->setProperty("color", "#3060C0"); 

これは機能し、コントロールを希望の色に変更します。ただし、コントロールが無効にされ、実行時に再度有効にされた場合は、#3060C0の代わりに既定の色(黒)が表示されます。 color:プロパティをQMLファイルに設定した場合、無効にして再度有効にしてもこの色が保持されますが、プログラムでこの色を変更できる必要があります。

私は通常の「カラー」プロパティに加えて、無効状態のカラーをプログラムで設定する方法はありますか?または、有効なプロパティで色の変更を無効にする何らかの方法が完全に変更されていますか?

+0

:あなたはまた、「不可欠」コードでバインディングを設定することができますか? – evilruff

+0

@evilruff:qt 5.5.1とQt Creator 3.6.1 – MusiGenesis

+0

有効な状態の変更にフックされ、そこに色を設定しているアプリケーションの別の場所にカスタムコードまたはqmlロジックがあることもあります。私はこのアプリを継承しており、それをまだよく理解していません。 – MusiGenesis

答えて

1

これをC++からやってはいけません。それは間違っています。悪い習慣を開発しないでください。

私は色を設定した場合:それは「スティック」、QMLファイル内のプロパティをしても、無効と再有効化された後 この色を保持しているが、私はプログラム的にこの色を変更することが する必要があります。

あり、それが行われるべきQML、でこれを行うには、シンプルで簡単な方法がある:あなたがbidingsで式を使用することができます

color: enabled ? colEnabled : colDisabled 

、との表現は変更の通知のプロパティが含まれている場合、これにより、コンポーネントが変更されるたびに式が自動的に再評価されます。したがって、enabledが変更されるたびに、enabledが真か偽かに応じて適切な色が割り当てられます。あなたはまた、より複雑な表現だけではなく、単一のライナーを書くことができます

、あなたはとして式を書くことができます:

color: { 
    if (enabled) return colEnabled 
    else return colDisabled 
} 

また割り当てと結合間の注意を払います。既存のバインディングを破るcolor = someColorを割り当てた場合。私はそれはあなたが使用しているQtのバージョンだけのバグ..だと賭けるだろう正直に言うと

color = Qt.binding(function() { ...bla bla... })

+0

Downvoter、追加するのに建設的なものがありますか? – dtech

関連する問題