2013-12-17 112 views
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

回答

1


PyQt4.QtCore.QVariant對象可以使用連接到視圖訪問的模式rowCountcolumnCountdata方法顯示的數據。在你的情況下,該模型是一個QSortFilterProxyModel

+0

不好意思,但是我怎麼把它們結合起來呢?我注意到,過濾器訪問rowCount方法後,它的值(這很好),但是當我嘗試使用「.data」方法錯誤出現。我會用一些代碼編輯帖子,以顯示我在做什麼。 – Rigel

+0

什麼樣的錯誤?你的代碼不包含任何'data'方法。 –

+0

對不起,我還在編輯。現在它不是一個錯誤(語法錯誤:P),但是現在它在控制檯上顯示:0x02F7B030上的 Rigel