2017-10-08 1 views
1

QAbstractTableModelを使用してQComboBoxを入力しています。これは素晴らしいですが、私は常に最初のコンボボックスインデックスに "Select one ..."の値を含めることを望みます。QAbstractTableModel(Model/View)を使用している場合、QComboBoxに "Select one ..."を追加するには?

これは可能ですか?


は私が私がモデルを設定しcombobox、持っている:

model = ProjectTableModel(projects) 
combobox.setModel(model) 

マイモデル:

class ProjectTableModel(QtCore.QAbstractTableModel): 

    def __init__(self, projects=[], parent=None): 
     QtCore.QAbstractTableModel.__init__(self, parent) 
     self._projects = projects 

    def rowCount(self, parent): 
     return len(self._projects) 

    def columnCount(self, parent): 
     return 2 

    def data(self, index, role): 
     row = index.row() 
     column = index.column() 

     if role == QtCore.Qt.DisplayRole and column == 0: 
      # Set the item's text 
      project = self._projects[row] 
      name = project.name() 
      return name 
     elif role == QtCore.Qt.UserRole and column == 0: 
      # Set the "itemData" 
      project = self._projects[row] 
      id = project.id() 
      return id 

答えて

1

は、あなたが取得するときに値を設定する/適切な条件を追加して調整することができます行数/必要な場合は数値。下の例はこれを行う方法を示していますが、_projectsアイテムにアクセスするときに、行が常に適切に調整されていることを慎重に確認する必要があります。 (そして、は、はモデル自体の行にアクセスするときに行番号を調整する必要がないことに注意してください)。

class ProjectTableModel(QtCore.QAbstractTableModel): 

    def __init__(self, projects=[], parent=None): 
     QtCore.QAbstractTableModel.__init__(self, parent) 
     self._projects = projects 

    def rowCount(self, parent): 
     return len(self._projects) + 1 # adjust row count 

    def columnCount(self, parent): 
     return 2 

    def data(self, index, role): 
     row = index.row() - 1 # adjust row number 
     column = index.column() 

     if role == QtCore.Qt.DisplayRole and column == 0: 
      if row >= 0: 
       # Set the item's text 
       project = self._projects[row] 
       return project.name() 
      else: 
       return 'Select one...' 
     elif role == QtCore.Qt.UserRole and column == 0 and row >= 0: 
      # Set the "itemData" 
      project = self._projects[row] 
      id = project.id() 
      return id 

    def setData(self, index, value, role): 
     row = index.row() - 1 # adjust row number 
     column = index.column() 

     # ignore the first item in the model 
     if role == QtCore.Qt.DisplayRole and column == 0 and row >= 0: 
      project = self._projects[row] 
      project.setName(value) # or whatever 
関連する問題