我已经将我的 QTableView 设置为视图,该视图的模型是 QSqlQueryModel。
对不起,塞尔维亚的信件,不过你会明白我在说什么。
self.model = QSqlQueryModel(self)
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("database.db")
db.open()
view = self.ui.myView
view.setVisible(True)
view.setSortingEnabled(True)
view.sortByColumn(2,Qt.AscendingOrder)
view.setModel(self.model)
view.clicked.connect(self.clickedSlot) #this function clickedSlot returns row and column numbers, which I use for extracting data from SQLite database.
def searchName(self): #this function searches the model for some name,lets say JOHN DOE`
name = (str(self.ui.inputName.text()).upper())
proxy = QSortFilterProxyModel()
proxy.setSourceModel(self.model)
proksi.setDynamicSortFilter(True)
proxy.setFilterRegExp(QRegExp(name, Qt.CaseInsensitive))
proxy.setFilterKeyColumn(1)
view = self.ui.myView
view.setVisible(False)
view.resizeColumnsToContents()
view.setVisible(True)
view.setSortingEnabled(True)
#view.sortByColumn(2,Qt.AscendingOrder)
view.setModel(proxy)
view.clicked.connect(self.clickedSlot)
屏幕截图 2,在 searchName 函数之后。再次,请原谅我的塞尔维亚字母。现在的问题;
如果我单击第一个屏幕截图中的一行,我会在控制台中打印行号和列号,例如 8,2。如果我单击第二个屏幕截图中的一行(打开代理过滤器的行),我会得到第 -1 行,第 -1 列。
我将如何实现 QAbstractProxyModel 和 mapToSource 方法来获取真实的行号和列号?
:编辑:
def clickedSlot(self,index):
rownumber = index.row()
colnumber = index.column()
self.model.setQuery("select name from cases")
tempname = self.model.data(self.model.index(rownumber, 1))
print("row " +str(rownumber))
print("column " +str(colnumber))
print("name " +str(tempname))
我得到的输出:
第 9 行第 1 列名称 JOHN DOE