2010-11-21 20 views
14
QTableView私は QTableViewの特定のセルでテキストを取得しようとしています。例:

Qt/C++:QTableViewの特定のセルでデータを取得する

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

これは、QTableViewの列0の行2にあるセルのテキストを取得するはずです。問題は、それがやっていることではないということです!私がindexAt()QPoint()に渡す引数にかかわらず、私はセル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

+0

indexAt(QPoint(0,2))は、ウィジェットの位置にあるセルのQModelIndexを返します。X = 0 Y = 2、Row/Colではなく0,2 –

答えて

21

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

以上が動作しない理由はかなりわからないが、これはありません。助けてくれてありがとう。あまりにもこの1つの作業

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

QPointを使用してカーソルの特定の位置に基づいて値を取得するためだと思います。QAを使用して右クリックに基づいてセルの値を取得しています – amree

+2

indexAt() 。ビュー内の特定*画素位置*(0,2)は、上部境界からわずか二つの画素であり、したがって、インデックス(0,0)ところで、UI-> tblInventory->モデル()に対応する( - >インデックス。 0,2).data()。toString()も機能します。 –

0

あなたQTableViewが使用するモデルによって提供さdata()機能をチェックし、あなたが記述効果はおそらくそれのバグに観察されます。で解決

+0

もう少し説明できますか?QSqlQueryModelを使用しています。 。QStringの符号列= "*" + UI-> tblInventory->モデル() - >データ(UI-> tblInventory-> indexAt(のQPoint(0,2)))のtoString()+ "*" を、しかし、これを:も試み – Joseph

0

はこれを試してみてください

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

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

model使用トップがこのtblInventoryにバインドされQAbstractModelです)

9

、それは短いです::

関連する問題