2016-05-13 17 views
0

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

誰かの類似した動作例がありますか?

答えて

0

のように見えます。私はsetDataをオーバーライドして、ユーザーデータが設定されたときにテキストと正規表現のパターンが更新されたことを確認しました。ドラッグアンドドロップの移動時には、このデータを呼び出すことなくアイテムが複製されます。私は実装がメンバーを直接コピーすると思います。だから私のソリューションは、リストのイベントを移動し、新しいアイテムに必要なものをすべて更新するのを聞くことでした。

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)