0

私は PySide2 を使用しており、QListView で値を検索し、その行を選択したいと考えています。.findText(string_to_search_for)QComboBox でできるように。Qlistview で値を検索し、インデックスを返すにはどうすればよいですか?

いくつかの追加情報:

私の QListView のモデルは、私が書いた QAbstractTableModel の実装です。モデルにはデータベースからのデータが入力されます。最初の列は ID、2 番目の列はデータベース アイテムの名前です。QListView は 2 列目のみを表示しています。これは 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
4

1 に答える 1

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」はその文字列を検索するモデ​​ルの列です。戻りインデックスを使用すると、 QListView で setCurrentIndex(index) を使用できます。それだけです。

于 2018-02-07T15:27:06.527 に答える