QTAbleViewで常にエディターを表示するようQTに伝えるにはどうすればよいですか?
-
22-08-2019 - |
質問
編集モードで常に最後の列を表示したいQTableViewがあります。 (これは、ユーザーが常に値を変更できるはずのQComboBoxです。)
で解決策を見たと思います QTドキュメント, 、しかし、私はもうそれを見つけることができません。それを行う簡単な方法はありますか?
使用してこの効果をアーカイブできると思います openPersistentEditor()
すべてのセルのために、しかし私はより良い方法を探しています。 (列全体で1回だけ指定するようなものです。)
解決
2つの可能性があります:
使用 setIndexWidget
, 、しかし、Trolltechは次のように書いています
この関数は、データ項目に対応する可視領域内に静的コンテンツを表示するためにのみ使用する必要があります。カスタムダイナミックコンテンツを表示するか、カスタムエディターウィジェットを実装する場合は、代わりにサブクラスQitemDelegateを使用します。
(そして、それはモデル/ビューパターンを破ります…)
または使用します 代表者 paint
方法. 。しかし、ここでは、有効化/無効化された要素などのすべてを自分で実装する必要があります。
他のヒント
自動編集動作を取得する1つの方法は、QabstractItemView :: alledittriggers値を使用して、ビューのsetedittrigger()関数を呼び出すことです。
特定の列の内容を特定の方法で表示するには、QabstractItemView :: SetItemDelegateForColumn()をご覧ください。これにより、必要なアイテムのためだけにカスタムデリゲートを指定できます。ただし、それぞれのエディターウィジェットを自動的に作成することはありません(原則的には何千ものものがある可能性があります)が、デリゲートを使用して各アイテムをエディターウィジェットのように見せる方法でレンダリングできます。
qabstractitemmodel::フラグ 仮想関数は、アイテムが編集可能かどうかをテストするために呼び出されます(参照 Qt :: Itemisedable)。を見てみましょう モデルを編集可能にします の中に モデル/ビュープログラミング ドキュメンテーション。
これを行う簡単な方法はわかりませんが、代表者を使用することで管理できるかもしれません。正直に言って、それがどのように機能するのか正確にはわかりませんが、十分に頑張っても何かが機能することができるはずです。適切なデリゲートを取得した場合、ビュー全体、ビューの1つのセル、または列または行のみに設定できるはずです。