Qt/С++: получение данных в определенной ячейке в QTableView

Я пытаюсь получить текст в определенной ячейке в QTableView. Например:

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

Это должно получить текст в ячейке в столбце 0 строки 2 в моем QTableView. Проблема в том, что это не то, что он делает!. Независимо от аргументов, которые я передаю в QPoint() в indexAt(), я получаю текст в ячейке 0,0. Я понятия не имею, почему это... любая помощь? Спасибо!

[править]
Я также пробовал это:

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

[Редактировать 2] Пытаясь выяснить, что происходит, я ввел эту строку кода:

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

Он должен получить QModelIndex в ячейке 2,2 и вывести его строку и ее столбец, который, конечно, должен быть 2 и 2. Однако я получаю 0 и 0! Таким образом, похоже, что это может быть проблемой с QTableView::indexAt(), будь то мое использование или некоторая ошибка. Может ли кто-нибудь пролить свет?

Ответы

Ответ 1

Разрешено:

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

Не совсем уверен, почему это не работает, но это так. Спасибо за помощь.

Ответ 2

Эта работа тоже и короче:

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

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

(model used top - это QAbstractModel, связанный с этим tblInventory)

Ответ 3

Проверьте функцию data(), предоставленную моделью, которую использует ваш QTableView, эффект, который вы описываете, вероятно, наблюдается из-за ошибки в нем.

Ответ 4

Попробуйте следующее:

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