2017-12-18 84 views
0

我使用PySide2並希望搜索QListView以獲取值並選擇該行。就像你可以在QComboBox上使用.findText(string_to_search_for)一樣。 如何搜索Qlistview中的值並返回索引?在Qlistview中查找值的索引

一些額外的信息:

我而QListView模型是實現QAbstractTableModel的我寫的。 該模型充滿了來自數據庫的數據,第一列中的id和第二列中的數據庫項目的名稱。 QListView只顯示第二列。這是我的QTableModel的代碼。

from PySide2 import QtGui,QtCore 

class TwoColumnTableModel(QtCore.QAbstractTableModel): 

    def __init__(self, row_data=[], column_data=[], parent=None): 
     QtCore.QAbstractTableModel.__init__(self, parent) 
     self.row_data = row_data 
     self.column_data = column_data 

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

    def columnCount(self, parent): 
     return len(self.column_data) 

    def flags(self, index): 
     return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable 

    def data(self, index, role): 

     if role == QtCore.Qt.DisplayRole: 

      row = index.row() 
      column = index.column() 
      value = self.row_data[row][column] 
      self.dataChanged.emit(row, column, []) 
      return value 

    def headerData(self, section, orientation, role): 

     if role == QtCore.Qt.DisplayRole: 

      if orientation == QtCore.Qt.Horizontal: 
       if section < len(self.column_data): 
        return self.column_data[section] 
       else: 
        return "TEMP COL" 


    def insertRows(self, position, rows, data=[], parent=QtCore.QModelIndex()): 
     self.beginInsertRows(parent, position, position + rows - 1) 

     for i in range(len(data)): 

      columns = [] 
      row_column1 = data[i][0] 
      row_column2 = data[i][1] 

      columns.insert(0, row_column1) 
      columns.insert(1, row_column2) 

      self.row_data.insert(position, columns) 

     self.endInsertRows() 

     return True 

    def removeRows(self, position, rows, parent=QtCore.QModelIndex()): 
     self.beginRemoveRows() 

     for i in range(rows): 
      value = self.row_data[position] 
      self.row_data.remove(value) 
     self.endRemoveRows() 

     return True 
+0

QListView - 是一個「視圖」類,它顯示從某些「模型」類取得的數據,擴展QAbstractItemModel。你使用什麼樣的模型來爲數據提供視圖? find方法應該在您正在使用的模型類中實現。 – MihanEntalpo

+0

顯示您的代碼。 – eyllanesc

+0

@MihanEntalpo我正在使用QTableModel,我編輯了我的帖子以包含代碼。 –

回答

0

我結束了創建在QTableModel類中的下列功能:

def find_index_of_value(self, search_string, search_column): 

    for index in range(self.rowCount(None)): 
     model_index = self.index(index, 1) 
     index_value = self.data(model_index, search_column) 
     if index_value == search_string: 
      return model_index 

的「SEARCH_STRING」是我要找的字符串和「search_column」作爲模型的列,其中i想要搜索該字符串。通過返回索引,我可以在我的QListView上使用setCurrentIndex(index),就是這樣。