1

QWidgetをQAbstractTableModelのエディターとして使用する例はありますか?
編集すると、選択肢のリストを含むQComboboxを作成する列があります。

ドキュメントは、QAbstractItemDelegateとカスタムペイント関数を作成する必要があることを示唆しているようですが、Qt::EditRoleで標準のQComboboxを単にポップアップするのはやり過ぎのようです。

注-コンボボックスの内容はすべての行で同じであり、誰かがセルをクリックしたときにのみ表示する必要があります。

これは単純なはずですが、機能させることができません。QTableWidgetベースのテーブルの場合は簡単ですが、非常に大きなデータテーブルの場合は必要です。

4

2 に答える 2

4

ドキュメントは、QAbstractItemDelegateとカスタムペイント関数を作成する必要があることを示唆しているようですが、Qt::EditRoleで標準のQComboboxを単にポップアップするのはやり過ぎのようです。

そこまで行く必要はありません。1つの方法は、サブクラス化QStyledItemDelegateしてからオーバーライドcreateEditor()し、事前入力されたコンボボックスを返すようにすることです。基本的なQt値型を使用している場合は、その関数setEditorDataと関数でおそらくすでに十分です。setModelData

多くの異なるモデルで機能するより一般的なものが必要な場合はQItemEditorFactory、エディターを正しいタイプに関連付けるを作成できます。これは、カスタムタイプでもうまく機能します。

ビューで示されると、ビューEditTriggerは編集が呼び出されているセルに固有のデリゲートを取得し、呼び出しdelegate->createEditor(...)て、パラメーターに従ってコンボボックスのサイズoptionsを設定し、現在のエントリをモデルで指定された値に設定します。 、ただし、これのほとんどは。で処理する必要がありQStyledItemDelegateます。Qt::EditRoleしたがって、ビューがそれを処理するため、直接心配する必要はありません。

于 2010-04-22T23:26:59.300 に答える
1

Qtの次の例を試してみましたか?

スピンボックスデリゲートの例

多分それはあなたに主題についてのはるかに明確な見方を与えるでしょう!

それが少し役立つことを願っています!

于 2010-04-23T05:44:32.340 に答える