2016-10-27 35 views
0

ファイルから項目を読み込んだ後にQt5.7アプリケーションを作成しています。QListViewを入力しています。ここにはその正確なコードがあります。Qt5:リストビューでクリックした項目の値を取得する

QStringListModel *model; 
model = new QStringListModel(this); 
model->setStringList(stringList); //stringList has a list of strings 
ui->listView->setModel(model); 
ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers); //To disable editing 

これで、私が設定したQListViewのリストが表示されます。私が今必要とするのは、ダブルクリックされた文字列を取得し、その値を他の場所で使用することです。どのように達成するのですか?

私は何をやってみましたがQListViewにリスナーを添付する

... // the rest of the code 
connect(ui->listView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(fetch())); 
... 

この方法でした。そして、私は機能fetch

void Window::fetch() { 
    qDebug() << "Something was clicked!"; 
    QObject *s = sender(); 
    qDebug() << s->objectName(); 
} 

しかしobjectName()関数が返す「リストビュー」およびないListViewコントロールを持っていますアイテムまたはインデックス

+1

スロットにパラメータとして 'QModelIndex'を追加し、そのスロットで動作させる必要があります。 – Hayt

答えて

1

信号は、既にクリックされたQModelIndexを提供します。

ですから、これにあなたのスロットを変更する必要があります。

void Window::fetch (QModelIndex index) 
{ 
.... 

QModelIndexは今、列と行のプロパティがあります。列には列がないため、行内には列挙されていません。これはクリックされたアイテムのインデックスです。

//get model and cast to QStringListModel 
QStringListModel* listModel= qobject_cast<QStringListModel*>(ui->listView->model()); 
//get value at row() 
QString value = listModel->stringList().at(index.row()); 
+0

それはうまくいった。ありがとう! – Zeokav

0

スロットのパラメータとしてインデックスを追加する必要があります。そのインデックスを使用してリストにアクセスすることができます

あなたのコードはこのようなものにする必要があります。

void Window::fetch (QModelIndex index) { /* Do some thing you want to do*/ }

関連する問題