2016-10-27 5 views
0

Я делаю приложение Qt5.7, где я заполняю QListView после чтения материалов из файла. Вот точный код.Qt5: Получить значение элемента, щелкнутого в listview

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 или индекс.

+1

Вы должны добавить параметр QModelIndex в свой слот и работать с ним. – Hayt

ответ

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()); 
+0

Это сработало. Благодаря! – Zeokav

0

Вы должны добавить индекс в качестве параметра вашего слота. Вы можете использовать этот индекс для доступа к списку

Ваш код должен быть таким.

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

Смежные вопросы