我正在制作一个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/