0

QTableView にデータを表示する必要があります。データを持つモデルがありますが、QAbstractProxyModel をサブクラス化してモデルのデータを転置しました。さらに、QItemDelegate をサブクラス化することで実現できる QTableView のボタンは 1 つだけ必要です。問題は次の場合です。 view->setItemDelegate(MyItemDelegate)(プッシュボタン用); を設定します。view->setModel(myModel); 表示->表示(); ... QItemDelegate の委譲時に、paint メソッドでペイントしたプッシュボタンしか見つかりません。検索したところ、myModel から値を設定するには setModelData() と setEditorData() が必要であることがわかりました。

PS:- view->setModel(MyModel); を試すと、表示->表示(); setItemDelegateなし... QTableViewでデータを見ることができました...しかし、委任後にデータが表示されません... QTableViewのQPushButtonのためだけにこのすべての痛み

4

1 に答える 1

0

アイデアは、 QItemDelegate::paint(painter,option,index); を追加することです。ボタンをペイントする派生クラスのペイントメソッド内。上記のコード行を追加すると、テーブルが最初に描画され、次に描画されたテーブルの上に描画されます。

したがって、ソリューションは次のようになります

void PushButtonDelegate::paint(QPainter *ペインター,const QStyleOptionViewItem &option, const QModelIndex &index) const {

QItemDelegate::paint(ペインター、オプション、インデックス);

// drawcontrol() を使用してプッシュボタンをペイントします。

}

これをしないとデータが失われます..ペイントの仕組みを理解すれば明らかですが、理解するのは簡単ではありません...何時間もかかりました

于 2016-05-04T15:11:59.417 に答える