問題タブ [qstyleditemdelegate]
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.
c++ - カスタム デリゲート クラスの「ペイント」関数をオーバーライドして QSpinBox を描画する方法
にカスタム委任者を追加しましたQTableView
。アイテムをダブルクリックすると、「QSpinBox」であるエディター ウィジェットが表示され、値をうまく編集できます。このエディター ウィジェットは、フォーカスが失われると消えます。私が欲しいのはQSpinBox
、いつもそこにいることです。ここでQtの例を見ると、クラスのpaint
関数をオーバーライドしQAbstractItemDelegate
て描画する必要があるQSpinBox
ことがわかりますが、その方法がわかりません。一般的に、ペイント関数内で Qt ウィジェットを描画する方法を知りたいです。
参考までに、私は次のテストコードを持っています:
c++ - QStyledItemDelegate を使用した QTreeView アイテムの描画
Qt の例のリストに基づいてプロジェクトを作成し、Simple Tree Model Example
そのモデルを編集して、いくつかの項目もチェックできるようにしました。これは次のようになります。
一部の項目を少し左に移動してほしい。そこで、派生してデリゲートを作成し、次のようQStyledItemDelegate
に再実装しました。QStyledItemDelegate::paint
このように、タイプの項目は定数の値 (この場合は 10 ピクセル)TreeItem::Type::Checkable
だけ左に描画されます。desiredThreshold
ここまでは順調ですね; すべてがうまく機能し、描画が正しく行われます。でも...
問題は、項目がわずかに左に描画されているにもかかわらず (これで問題ありません)、項目がまったく移動していないかのようにマウス イベントがまだ機能していることです。仕組みは次のとおりです。
チェックボックス(アイテム全体と一緒に移動した)をクリックすると、モデルが正しく更新されるように、アイテム全体がわずかに左に描画されることをデリゲートに伝えることは可能ですか?