2010-11-21 8 views
14

J'essaye d'obtenir le texte à une certaine cellule dans un QTableView. Par exemple:Qt/C++: obtention des données à une certaine cellule dans un QTableView

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

Cela devrait obtenir le texte à la cellule dans la colonne 0 ligne 2 dans mon QTableView. Le problème est, ce n'est pas ce qu'il fait! Indépendamment des arguments que je passe dans le QPoint() dans le indexAt(), je reçois le texte à la cellule 0,0. Je ne sais pas pourquoi c'est ... de l'aide? Merci!

[modifier]
J'ai aussi essayé ceci:

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

[Edit 2] Essayer de savoir ce qui se passe, je l'ai mis dans cette ligne de code:

qDebug()<< ui->tblInventory->indexAt(QPoint(2,2)).row() << " and " << ui->tblInventory->indexAt(QPoint(2,2)).column(); 

Il devrait obtenir le QModelIndex à la cellule 2,2 et sortir sa ligne et sa colonne, ce qui bien sûr devrait être 2 et 2. Cependant, je reçois 0 et 0! Donc, il semble que cela pourrait être un problème avec QTableView::indexAt(), que ce soit mon utilisation ou une sorte de bug. Quelqu'un peut-il nous éclairer?

+0

vérifier ma réponse. – SIFE

+0

indexAt (QPoint (0,2) retournera QModelIndex d'une cellule à la position du widget X = 0 Y = 2, pas Row/Col 0,2 –

Répondre

21

RESOLUE:

ui->tblInventory->model()->data(ui->tblInventory->model()->index(0,2)).toString() 

Pas très bien pourquoi le ne fonctionne pas, mais cela ne. Merci pour l'aide.

+1

Je pense que c'est parce que QPoint est utilisé pour obtenir une valeur basée sur une certaine position du curseur.J'utilise QPoint pour obtenir la valeur de la cellule sur la base d'un clic droit – amree

+2

indexAt() retourne l'index à une certaine * position de pixel * dans la vue (0,2) est juste deux pixels de la bordure supérieure, et correspond donc à l'index (0,0) .Btw, ui-> tblInventory-> model() -> index (0,2) .data(). ToString() fonctionne également. –

0

Vérifiez la fonction data() fournie par le modèle que votre QTableView utilise, l'effet que vous décrivez est probablement observé en raison d'un bogue.

+0

Pouvez-vous expliquer un peu plus? J'utilise QSqlQueryModel. aussi essayé: QString codestring = "*" + ui-> tblInventory-> model() -> données (ui-> tblInventory-> indexAt (QPoint (0,2))). toString() + "*" mais ceci ne fonctionne pas non plus – Joseph

0

Essayez ceci:

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

Celui travail aussi, et il est plus court:

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

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

(model top utilisé est le QAbstractModel qui est lié à cette tblInventory)

Questions connexes