Qt / C++: obtenir les données à une certaine cellule dans une vue QTableView

j'essaie d'obtenir le texte d'une certaine cellule dans un QTableView. Par exemple:

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

Cela devrait faire passer 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 message à la cellule 0,0. Je n'ai aucune idée de pourquoi c'est... toute aide? Merci!

[edit]

J'ai aussi essayé ceci:

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

[Modifier 2] Essayer de trouver ce qu'il 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 de 2,2 et de la sortie de sa ligne et de sa colonne, ce qui bien sûr doit être de 2 et 2. Cependant, j'ai 0 et 0! Donc il semble que cela pourrait être un problème avec QTableView::indexAt(), si son utilisation ou une sorte de bug. Quelqu'un peut jeter un peu de lumière?

14
demandé sur rc0r 2010-11-21 10:53:38

4 réponses

Résolu avec:

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

Je ne suis pas tout à fait sûr de savoir pourquoi cela ne fonctionne pas, mais cela fonctionne. Merci pour l'aide.

22
répondu Joseph 2010-11-21 08:30:58

celui-ci trop de travail et c'est plus court:

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

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

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

9
répondu Mahir Zukic 2013-06-16 11:10:22

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

0
répondu dpq 2010-11-21 08:03:18

essaye 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() + "*";
0
répondu SIFE 2012-02-19 23:41:18