2017-05-04 4 views
0

カスタムListModelをPyQtで動作させて表示させようとしています。ただし、リストビューは常に空白になります。私はUserModel.usersが持っている必要がある項目を持っていることを確認し、dataChangedは正しく起動しますが、何も表示されません。 同時に、データのprint(index)は何も出力しないので、モデルデータは決して呼び出されませんか? 私は何が欠けていますか?あなたがbeginInsertRowsendInsertRows呼び出す必要がありますQListViewはサブクラス化されたQAbstractListModelの表示を拒否します

self.userList = QtWidgets.QListView() 
    self.userList.setModel(self.main.commandHandler.userList) 
    self.userList.show() 

class UserModel(QAbstractListModel): 
    def __init__(self, parent=None): 
     QAbstractListModel.__init__(self, parent) 
     self.users = [] 

    def rowCount(self, parent = None) : 
     if parent != None: 
      return 0 
     return len(self.users) 

    def flags(self): 
     return Qt.NoItemFlags 

    def data(self, index, role = Qt.DisplayRole): 
     print(index) 
     name = self.users[index].name 
     if index.isValid(): 
      if (role == Qt.DisplayRole): 
       return QVariant(name) 
     else: 
      return QVariant() 

    def addUser(self, payload): 
     user = User(payload) 
     l = len(self.users) 
     self.users.append(user) 
     self.dataChanged.emit(self.index(l, 0), self.index(l, 0)) 

答えて

0

からdataChangedは、既存のアイテムです。

あなたのモデルでpytest-qt's modeltesterを実行して、より多くの問題を見つけることができます。

また、QStandardItemModelQStringListModelがあります。実際のモデルが例のように簡単な場合は、使いやすくなる可能性があります。

+0

beginInsertRowsとendInsertRowsを追加しようとしましたが、何も変更されません。 pytestqtを試してみると、テスターでも何か問題があるようです。これは、上書きしないhasIndexにエラーを返します。する必要はありません。 – user1787062

+0

モデルと正確なエラーで[問題](https://github.com/pytest-dev/pytest-qt/issues)を開くことができますか? –

関連する問題