2010-11-21 9 views
14

Sto cercando di ottenere il testo in una determinata cella in un QTableView. Per esempio:Qt/C++: acquisizione dei dati in una determinata cella in una QTableView

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 !. Indipendentemente dagli argomenti che passo nel QPoint() nel indexAt(), ottengo il testo nella cella 0,0. Non ho idea del perché questo sia ... un aiuto? Grazie!

[modifica]
Inoltre ho provato questo:

QString codestring = "*" + ui->tblInventory->model()->data(ui->tblInventory->indexAt(QPoint(0,2))).toString() + "*"; 

[Edit 2] Cercando di scoprire 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(); 

Dovrebbe ottenere il QModelIndex nella cella 2,2 e mostrare la sua riga e la sua colonna, che ovviamente dovrebbe essere 2 e 2. Tuttavia, ottengo 0 e 0! Quindi sembra che questo potrebbe essere un problema con QTableView::indexAt(), che sia il mio utilizzo o una specie di bug. Qualcuno può far luce?

+0

controllare la mia risposta. – SIFE

+0

indexAt (QPoint (0,2) restituire QModelIndex di una cella nella posizione del widget X = 0 Y = 2, non riga/colonna 0,2 –

risposta

21

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 fa. Grazie per l'aiuto.

+1

Penso che sia perché QPoint è usato per ottenere un valore basato su certa posizione del cursore Sto usando QPoint per ottenere il valore della cella basato su un clic destro. – amree

+2

indexAt() restituisce l'indice su una certa * posizione * del pixel nella vista. (0,2) è solo due pixel dal bordo superiore, e quindi corrisponde all'indice (0,0). Btw, ui-> tblInventory-> model() -> index (0,2) .data(). ToString() funziona anche. –

0

Controllare la funzione data() fornita dal modello utilizzato da QTableView, l'effetto che si descrive è probabilmente osservato a causa di un bug in esso.

+0

Puoi spiegare un po 'di più? Sto utilizzando QSqlQueryModel. anche tentato: QString codestring = "*" + ui-> tblInventory-> model() -> data (ui-> tblInventory-> indexAt (QPoint (0,2))). toString() + "*"; ma questo – Joseph

0

Prova questa:

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() + "*"; 
9

Questo lavoro troppo ed è più breve:

QModelIndex index = model->index(row, col, QModelIndex()); 

ui->tblInventory->model()->data(index).toString(); 

(model superiore utilizzato è il QAbstractModel che è destinato a questo tblInventory)

Problemi correlati