QSortFilterProxyModel获取过滤数据

时间:2013-12-17 11:06:51

标签: python qt pyqt

我对Qt中的这种对象缺乏经验,我需要知道是否有一种方法可以在过滤后检索数据(用于对它们执行某些操作,例如在另一个文件中导出)。

情况是这样的,我从数据库中获取数据并将其存储在列表的python列表中,之后我创建了一个QTableView模型并使用为包含此数据设置的QSortFilterProxyModel对其进行初始化。在接口中有一个连接到setFilterRegExp方法的QLineEdit,其目的是搜索QTableView中的数据。

我需要创建一个按钮(或其他),用文件当前显示的数据写入文件,但我无法弄清楚如何检索当前显示的数据。

感谢您的任何建议。

class recordsTableModel(QAbstractTableModel):

def __init__(self, records, parent = None):
    QAbstractTableModel.__init__(self, parent)
    self.__records = records

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

def columnCount(self, parent):
    return len(self.__records[0])

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

def data(self, index, role):
    if role == Qt.DisplayRole:
        row = index.row()
        column = index.column()
        value = self.__records[row][column]

        return value

def headerData(self, section, orientation, role):
    if role == Qt.DisplayRole:
        if orientation == Qt.Horizontal:
            return self.__records[0]._fields[section]

class AndroidDialog(QDialog, ui_android_dialog.Ui_androidDialog):
def __init__(self, parent=None):
    super(AndroidDialog, self).__init__(parent)
    self.setupUi(self)

    self.proxyModelContact = QSortFilterProxyModel(self)
    self.proxyModelContact.setSourceModel(recordsTableModel(self.contacts))
    self.proxyModelContact.setFilterKeyColumn(-1)
    self.proxyModelContact.setFilterCaseSensitivity(Qt.CaseInsensitive)
    self.contactsTableView.setModel(self.proxyModelContact)

    self.contactsExportToolButton.clicked.connect(self.printData)

def printData(self):
    print "%s" % self.proxyModelContact.rowCount()
    print "%s" % self.proxyModelContact.data(self.proxyModelContact.index(0, 0))

因为我知道索引应该指向模型中的项目(对我来说是一个表)所以使用它应该打印第一列中的第一个项目。 Insteat它打印:
PyQt4.QtCore.QVariant对象位于0x02F7B030

1 个答案:

答案 0 :(得分:1)

您可以使用附加到视图的模型的rowCountcolumnCountdata方法来访问显示的数据。在您的情况下,模型是QSortFilterProxyModel