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