0

私のアプリには、QStandardItemModel を持つ QListView があります。QStandardItem を拡張して独自のデータを追加することで正常に機能するユーザー データを保持するアイテムが必要です。しかし、リスト内のアイテムをドラッグして並べ替えられるようにしたいのですが、ここで問題が始まります。QTはアイテムをドロップするとクローンを作成し、テストと色をコピーするようですが、私のユーザーデータについては知りません。clone()で解いてみましたが、アイテムのプロトタイプ(空のアイテム)でしか呼び出されません。また、 setData() 関数をオーバーライドして、ユーザー データにロール UserRole を使用しようとしましたが、ドラッグしてもコピーされません。

誰かが似たような実例を持っていますか?

4

2 に答える 2

0

QStandardItemメソッドをサブクラス化し、オーバーライドする必要がありますclone。モデルのアイテム プロトタイプも設定する必要があります。

class MyItem(QStandardItem):

    def clone(self):
        obj = super(MyItem, self).clone()
        ... # copy user data as well
        return obj

model.setItemPrototype(MyItem())

QStandardItemしかし、すでにユーザーデータをコピーすることを期待しています。ユーザーデータをどのように設定していますか?一般的にはこのように見えます

class MyItem(QStandardItem):
    MyDataRole = Qt.UserRole + 1
    MyOtherRole = Qt.UserRole + 2

item.setData('a value', MyItem.MyDataRole)
于 2016-05-14T09:34:52.590 に答える