Qt / C ++: получение данных в определенной ячейке в QTableView - PullRequest
16 голосов
/ 21 ноября 2010

Я пытаюсь получить текст в определенной ячейке в 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(), будь то мое использование или какая-то ошибка.Кто-нибудь может пролить свет?

Ответы [ 4 ]

26 голосов
/ 21 ноября 2010

Решено с помощью:

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

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

9 голосов
/ 16 июня 2013

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

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

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

(model используется top - это QAbstractModel, который привязан к этому tblInventory)

0 голосов
/ 20 февраля 2012

Попробуйте это:

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 голосов
/ 21 ноября 2010

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

...