1
我對Qt中的這種對象相當缺乏經驗,我需要知道是否有一種方法可以在過濾之後檢索數據(例如,使用它們執行某些操作,例如導出到另一個文件中)。QSortFilterProxyModel獲得過濾數據
情況是這樣的,我從數據庫中獲取數據並將其存儲在列表的Python列表中,然後創建一個QTableView模型並使用爲包含此數據設置的QSortFilterProxyModel對其進行初始化。在接口中有一個連接到setFilterRegExp方法的QLineEdit,其目的是搜索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))
什麼,我知道該指數應在該模型的項目點(我的表),所以本應在第一列打印的第一個項目。 Insteat它打印:在0x02F7B030
不好意思,但是我怎麼把它們結合起來呢?我注意到,過濾器訪問rowCount方法後,它的值(這很好),但是當我嘗試使用「.data」方法錯誤出現。我會用一些代碼編輯帖子,以顯示我在做什麼。 – Rigel
什麼樣的錯誤?你的代碼不包含任何'data'方法。 –
對不起,我還在編輯。現在它不是一個錯誤(語法錯誤:P),但是現在它在控制檯上顯示:0x02F7B030上的 –
Rigel