Qt / C ++: Ottenere i dati ad una certa cella in una QTableView
-
26-09-2019 - |
Domanda
Sto cercando di ottenere il testo ad una certa cella in una QTableView
. Ad esempio:
QString codestring = "*" + ui->tblInventory->indexAt(QPoint(0,2)).data().toString() + "*";
Questo dovrebbe ottenere il testo alla cella nella colonna 0 riga 2 nella mia QTableView
. Il problema è, che non è quello che sta facendo !. A prescindere dalle argomentazioni che passano nella QPoint()
nel indexAt()
, ricevo il testo in cella di 0,0. Non ho idea perché questo è ... alcun aiuto? Grazie!
[modifica]
Ho anche provato questo:
QString codestring = "*" + ui->tblInventory->model()->data(ui->tblInventory->indexAt(QPoint(0,2))).toString() + "*";
[Modifica 2] Cercando di scoprire che cosa sta succedendo, ho messo in questa riga di codice:
qDebug()<< ui->tblInventory->indexAt(QPoint(2,2)).row() << " and " << ui->tblInventory->indexAt(QPoint(2,2)).column();
Si dovrebbe ottenere il QModelIndex
dalla cella 2,2 e l'uscita relativa riga e relativa colonna, che ovviamente deve essere 2 e 2. Tuttavia, ottengo 0 e 0! Così sembra che questo potrebbe essere un problema con QTableView::indexAt()
, se il suo uso della mia o una sorta di bug. Qualcuno può far luce?
Soluzione
Risolto con:
ui->tblInventory->model()->data(ui->tblInventory->model()->index(0,2)).toString()
Non capisco il motivo per cui quanto sopra non funziona, ma questo lo fa. Grazie per l'aiuto.
Altri suggerimenti
Questo lavoro troppo ed è più breve:
QModelIndex index = model->index(row, col, QModelIndex());
ui->tblInventory->model()->data(index).toString();
(model
usati superiore è il QAbstractModel che è destinato a questo tblInventory
)
Controllare il funzionamento data()
fornita dal modello che utilizza il vostro QTableView, l'effetto che si descrive è probabilmente osservato a causa di un bug in esso.
Prova questo:
QModelIndex index = ui->tblInventory->indexAt(p); // p is a QPoint you get from some where, may be you catch right click
QString codestring = "*" + index->data().toString() + "*";