我正在制作一个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()函数返回“ listView”,而不返回listView项目或索引。

最佳答案

该信号已经为您提供了被单击的QModelIndex

因此,您应该将广告位更改为此:

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


QModelIndex现在具有column和row属性。由于列表没有列,因此您对该行有兴趣。这是单击的项目的索引。

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

关于c++ - Qt5:获取在 ListView 中单击的项目的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40285104/

10-09 19:12