Zeokav
Zeokav

Reputation: 1703

Qt5 : Get value of item clicked in a listview

I'm making a Qt5.7 application where I am populating a QListView after reading stuff from a file. Here's the exact code of it.

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

Now this displays the list just fine in a QListView that I have set up. What I need to do now is to get the string that has been double clicked and use that value elsewhere. How do I achieve that?

What I tried doing was to attach a listener to the QListView this way

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

And then I have the function fetch

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

However the objectName() function returns "listView" and not the listView item or the index.

Upvotes: 0

Views: 2118

Answers (2)

Hayt
Hayt

Reputation: 5370

The signal already provides you with a QModelIndex which was clicked.

So you should change your slot to this:

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

QModelIndex has now a column and a row property. Because a list has no columns you are interessted in the row. This is the index of the item clicked.

//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());

Upvotes: 1

Gurrala
Gurrala

Reputation: 1

You should add the index as parameter of your slot. You can use that index to access the list

Your code should be some thing like this.

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

Upvotes: 0

Related Questions