我正在制作一个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项目或索引。
答案 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*/
}