2

私は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 対応のグラフィック担当者だけでなく、これらのアイテムのスタイルを設定するプログラマーが必要です...


モデル提供のプロパティ/データに基づいてスタイルシートでサブクラス化する方法はありますか?

4

0 に答える 0