2010-11-21 608 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

相關問題