0

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

4

1 に答える 1

3

あなたを安心させるために序文をさせてください...セルビア語の手紙はまったく問題ありませんでした:-)

確かにSLOTのコードを確認する必要がありself.clickedSlotますが、その時点で行の列を間違って解決していると思います。

self.ui.myViewQTableViewで、clicked ()シグナルを使用していると仮定すると、受信する必要があるのはプロキシ モデルclickedSlotQModelIndexです。その時点で、次のことができるはずです。

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() 

これは、プロキシを確認する 1 つの方法にすぎません。フラグが設定されていて、それがプロキシであることを既に知っているかもしれません。しかし、ここでは、インデックスのモデル参照に「mapToSource」メソッドがあるかどうかを確認するだけです。ある場合は、プロキシであることがわかります。したがってmapToSource、その ProxyIndex で を呼び出すだけで、実際のインデックスを取得できます。

于 2012-07-16T03:30:13.233 に答える