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