簡體   English   中英

QSortFilterProxyModel獲取過濾數據

[英]QSortFilterProxyModel get Filtered Data

我對Qt中的這種對象缺乏經驗,我需要知道是否有一種方法可以在過濾后檢索數據(對它們進行處理,例如導出到另一個文件中)。

情況是這樣的,我從數據庫獲取數據並將其存儲在列表的python列表中,此后,我創建了QTableView模型,並使用設置為包含此數據的QSortFilterProxyModel對其進行了初始化。 在該接口中,有一個QLineEdit連接到setFilterRegExp方法,其目的是在QTableView中搜索數據。

我需要創建一個按鈕(或其他任何按鈕),以使用GUI上當前顯示的數據寫入文件,但是我無法弄清楚如何檢索當前顯示的數據。

感謝您的任何建議。

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))

對於我所知道的索引應該指向模型中的項(對我來說是一張表),因此它應該在第一列中打印第一項。 實例打印:
PyQt4.QtCore.QVariant對象位於0x02F7B030

您可以使用視圖附帶的模型的rowCountcolumnCountdata方法訪問顯示的數據。 在您的情況下,模型是QSortFilterProxyModel

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM