2010-11-21 601 views
14

我试图在QTableView的某个单元格中获取文本。例如:Qt/C++:在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(); 

它应该得到在单元格2,2的QModelIndex并输出其行和列,当然应该是2和2.但是,我得到0和0!所以看起来这可能是QTableView::indexAt()的一个问题,无论是我的使用还是某种错误。任何人都可以点亮一下吗?

+0

检查我的答案。 – SIFE 2012-02-19 23:41:52

+0

indexAt(QPoint(0,2)将返回位于窗口小部件位置X = 0处的单元格的QModelIndex Y = 2,而不是Row/Col 0,2 – 2013-02-02 21:33:28

回答

21

解决了与:

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

不明白为什么上面没有工作,但这样做。谢谢您的帮助。

+1

我认为这是因为QPoint用于根据光标的某个位置来获取一个值,我使用QPoint来获取基于右击的单元格值 – amree 2010-11-21 08:35:24

+2

indexAt()返回索引at (0,2)只是距上边界两个像素,因此对应于索引(0,0)。Btw,ui-> tblInventory-> model() - > index( 0,2).data()。toString()也可以。 – 2010-11-21 09:33:15

0

检查您的QTableView使用的模型提供的data()函数,您描述的效果可能由于其中的错误而被观察到。

+0

您可以更多解释一下吗?我正在使用QSqlQueryModel。也尝试过:QString codestring =“*”+ ui-> tblInventory-> model() - > data(ui-> tblInventory-> indexAt(QPoint(0,2)))。toString()+“*”; – Joseph 2010-11-21 08:12:50

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

这一个工作,也和它的短:

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

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

model使用顶部是QAbstractModel绑定到这个tblInventory

相关问题