我将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)
在searchName函数之后Screenshot 2。再次,请原谅我的塞尔维亚信件。现在问题;
如果我点击第一个屏幕截图中的一行,我会在控制台中打印行号和列号,如8,2。 如果我点击SECOND屏幕截图中的一行(代理过滤器打开一行),我会得到行-1,列-1。
我如何实现QAbstractProxyModel和mapToSource方法来获取REAL行号和列号?
:编辑:
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答案 0 :(得分:2)
让我先说一下你的安慰......塞尔维亚的信件根本没有问题: - )
我需要确定SLOT self.clickedSlot
的代码是确定的,但我的猜测是你在那时解析了行列错误。
假设self.ui.myView
是QTableView并且您使用的是clicked()信号,那么您应该在clickedSlot
中收到的代码是QModelIndex代理商模型。此时您应该能够执行以下操作:
def clickedSlot(self, modelIndex):
model = modelIndex.model()
if hasattr(model, 'mapToSource'):
# We are a proxy model
modelIndex = model.mapToSource(modelIndex)
print modelIndex.row(), modelIndex.column()
这只是检查代理的一种方法。也许你有一个标志集,你已经知道它的代理。但是在这里我只是检查索引上的模型引用是否具有“mapToSource”方法,如果是,那么我们就知道它是一个代理。因此,我们只需使用该ProxyIndex调用mapToSource
即可获得真实索引。