問題タブ [qstyle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1361 参照

c++ - QStyledItemDelegate を使用した QTreeView アイテムの描画

Qt の例のリストに基づいてプロジェクトを作成し、Simple Tree Model Exampleそのモデルを編集して、いくつかの項目もチェックできるようにしました。これは次のようになります。

ここに画像の説明を入力

一部の項目を少し左に移動してほしい。そこで、派生してデリゲートを作成し、次のようQStyledItemDelegateに再実装しました。QStyledItemDelegate::paint

このように、タイプの項目は定数の値 (この場合は 10 ピクセル)TreeItem::Type::Checkableだけ左に描画されます。desiredThreshold

ここまでは順調ですね; すべてがうまく機能し、描画が正しく行われます。でも...

問題は、項目がわずかに左に描画されているにもかかわらず (これで問題ありません)、項目がまったく移動していないかのようにマウス イベントがまだ機能していることです。仕組みは次のとおりです。

ここに画像の説明を入力

チェックボックス(アイテム全体と一緒に移動した)をクリックすると、モデルが正しく更新されるように、アイテム全体がわずかに左に描画されることをデリゲートに伝えることは可能ですか?

0 投票する
1 に答える
91 参照

c++ - QStyleでヘッダーテキストの幅を知る方法は?

私はQTreeViewそれを使用ProxyStyleしています。

ここに画像の説明を入力

上の画像はヘッダーのみです。ここで、図のように、ヘッダー ラベルの横に上/下矢印 (アイテムを並べ替えるため) を描画する必要があります。矢印を正しい位置に配置するには、次のことを知る必要があります。

  • 左余白 = テキストと左境界線の間の距離
  • テキスト幅
  • 右マージン = テキストと矢印の間の距離

この場合、テキスト幅を計算するにはどうすればよいですか? QFontMetrics について考えましたが、計算するテキストを受け取る方法がわかりません。

私のスタイルでは、drawPrimitive関数のみを使用します

subElementRect( SE_HeaderLabel, p_option, p_widget ).width()この場合に使用しますが、間違っています。テキストの幅を計算するにはどうすればよいですか?