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 のように行番号と列番号がコンソールに出力されます。2 番目のスクリーンショット (プロキシ フィルターがオンになっているもの) の行をクリックすると、行 -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