Qt/C++:在QTableView中获取特定单元格的数据

22

我想要获取一个 QTableView 中特定单元格的文本。例如:

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

我的QTableView中,这应该获取列0行2的单元格文本。问题是,它并没有做到!无论我在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();

它应该获取单元格2,2处的QModelIndex并输出其行和列,当然应该是2和2。然而,我得到的是0和0!看起来这可能是QTableView::indexAt()的问题,无论是我的使用还是某种错误。有人能给予一些启示吗?


1
indexAt(QPoint(0,2)) 将返回位于小部件位置 X=0 Y=2 的单元格的 QModelIndex,而不是行/列 0,2。 - Valentin H
4个回答

31

解决方法:

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

不太确定为什么上面那个不起作用,但这个可以。感谢帮助。


1
我认为这是因为 QPoint 被用于根据光标的特定位置获取值。我正在使用 QPoint 来获取右键单击时的单元格值。 - Amree
3
indexAt() 函数返回视图中某个 像素位置 的索引。(0,2) 距离顶部边框只有两个像素,因此对应于索引 (0,0)。另外,ui->tblInventory->model()->index(0,2).data().toString() 也可以使用。 - Frank Osterfeld

10
这个也可行,而且更短:

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

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

使用的顶层model是绑定到此tblInventory的QAbstractModel。


这不是关于长短问题。在这里你创建额外的实例,使他的解决方案更好。无论如何,干得好! - AAEM

0
请检查您的 QTableView 使用的模型提供的 data() 函数,您所描述的效果可能是由于其中的一个错误导致的。

你能再解释一下吗?我正在使用 QSqlQueryModel。我也尝试过:QString codestring = "" + ui->tblInventory->model()->data(ui->tblInventory->indexAt(QPoint(0,2))).toString() + ""; 但这也不起作用。 - Joseph

0

试试这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接