私はQTreeView自分のモデル(QAbstractItemModel派生)のアイテムを持っています。QTreeViewここで、さまざまなプロパティに応じてさまざまな背景を持つように、アイテムのスタイルを設定したいと思います (上のスタイルシートを使用)。
また、この問題はどのモデル/ビュー コンテナにも当てはまるようです。だけではありませんQTreeView。
たとえば、別の背景を行うのは簡単です。alternatingRowColors上にあるQTreeView必要がありますtrue。次に、スタイルシートで:alternate疑似セレクターを使用して、代替アイテムのプロパティを変更できます。
QTreeView::item {
background: green;
}
QTreeView::item:alternate {
background: blue;
}
選択した項目を実行するのも同様に簡単です。実際、Qt の擬似セレクターによって処理されることはすべて簡単です。
しかし、疑似セレクターではないプロパティはどうでしょうか? 特に、関連付けられた値に基づいてスタイルを選択するItemDataRole方法 (モデルにデータを格納するための合理的に一般的な方法はどの継ぎ目か)?
コツがあるので注意。たとえば、チェックされた状態を使用しない場合は、その状態を「再利用」して独自のものにマップし、そのための疑似セレクターを使用できます...しかし、これは単なる回避策であり、一般的な回避策でもありません。
必要なものを追加するアイテムQTreeWidget専用の派生クラスを持つことで行くことができるようです。次に、スタイルシートでそのプロパティに名前でアクセスできます。QWidgetQ_PROPERTY
たとえば、Qt Center の「スタイルシートでカスタム Q_PROPERTY を使用する」の質問と「動的プロパティの使用中にウィジェットの更新をトリガーする」を参照してください。Qt Style Sheets Examples の最後にある注記。
しかし、*Viewクラスには、そのアイテム (または少なくともパブリックにアクセス可能なアイテム) のQWidgets または s さえありません。QObject
独自のQAbstractItemDelegate、おそらく から派生したものを提供する可能性もありQStyledItemDelegateます。ただし、これにより、スタイルシートの操作が少し難しくなります。
background-colorプロパティのようなシンプルなスタッフで、それは実行可能のようです。しかし、複雑なセットで や他の多くのスタイルをどのようにシミュレートborder-imageしますか?padding
アイテム デリゲートを記述すると、コードが凍結されることは言うまでもありません。スタイルシートのレンダリング方法を変更した場合Qt(何らかの方法で改善した場合)、その恩恵を受けることはできません... また、ロジックとプレゼンテーションの分離が少し難しくなります。CSS 対応のグラフィック担当者だけでなく、これらのアイテムのスタイルを設定するプログラマーが必要です...
モデル提供のプロパティ/データに基づいてスタイルシートでサブクラス化する方法はありますか?