Qt / C ++: получение данных в определенной ячейке в 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() + "*";

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


person Joseph    schedule 21.11.2010    source источник
comment
indexAt (QPoint (0,2) вернет QModelIndex ячейки в позиции виджета X = 0 Y = 2, а не Row / Col 0,2   -  person Valentin Heinitz    schedule 03.02.2013


Ответы (4)


Решено:

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

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

person Joseph    schedule 21.11.2010
comment
Я думаю, это потому, что QPoint используется для получения значения на основе определенной позиции курсора. Я использую QPoint, чтобы получить значение ячейки, щелкнув правой кнопкой мыши. - person Amree; 21.11.2010
comment
indexAt () возвращает индекс в определенной позиции пикселя в представлении. (0,2) находится всего в двух пикселях от верхней границы и, следовательно, соответствует индексу (0,0). Кстати, ui- ›tblInventory-› model () - ›index (0,2) .data (). ToString () также работает. - person Frank Osterfeld; 21.11.2010

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

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

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

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

person Mahir Zukic    schedule 16.06.2013
comment
это не короче или длиннее. Здесь вы создаете дополнительные экземпляры, которые улучшают его решение. В любом случае хорошая работа - person AAEM; 23.04.2018

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

person dpq    schedule 21.11.2010
comment
Не могли бы вы объяснить немного больше? Я использую QSqlQueryModel. Я также пробовал: QString codestring = + ui- ›tblInventory-› model () - ›data (ui-› tblInventory- ›indexAt (QPoint (0,2))). ToString () + ; но это тоже не работает. - person Joseph; 21.11.2010

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

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() + "*";
person SIFE    schedule 19.02.2012