Qt5:获取在列表视图中点击的项目的价值

时间:2016-10-27 12:53:48

标签: c++ qt

我正在制作一个Qt5.7应用程序,我在从文件中读取内容后填充QListView。这是它的确切代码。

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()函数返回&#34; listView&#34;而不是listView项目或索引。

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

您应该将索引添加为插槽的参数。您可以使用该索引访问列表

你的代码应该是这样的。

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