2016-10-27 1 views
0

Ich mache eine Qt5.7-Anwendung, wo ich eine QListView nach dem Lesen von Sachen aus einer Datei bevölkern. Hier ist der genaue Code davon.Qt5: Holen Wert des Artikels in einem Listenansicht geklickt

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 

Nun zeigt diese Liste nur gut in einem QListView, die ich eingerichtet haben. Was ich jetzt tun muss, ist, die Zeichenfolge zu erhalten, auf die doppelt geklickt wurde, und diesen Wert woanders zu verwenden. Wie erreiche ich das?

Was ich versucht zu tun war ein Zuhörer auf die QListView auf diese Weise zu befestigen

... // the rest of the code 
connect(ui->listView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(fetch())); 
... 

Und dann habe ich die Funktion fetch

void Window::fetch() { 
    qDebug() << "Something was clicked!"; 
    QObject *s = sender(); 
    qDebug() << s->objectName(); 
} 

jedoch die objectName() Funktion gibt „Listview“ und nicht das Listview Artikel oder der Index.

+1

Sie sollten einen 'QModelIndex' als Parameter zu Ihrem Slot hinzufügen und damit arbeiten. – Hayt

Antwort

1

Das Signal bereits liefert Ihnen eine QModelIndex, die angeklickt wurde.

So sollten Sie Ihren Slot dies ändern:

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

QModelIndex hat jetzt eine Spalte und eine Zeile Eigenschaft. Da eine Liste keine Spalten enthält, interessiert Sie die Zeile. Dies ist der Index des angeklickten Elements.

//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

Das hat funktioniert. Vielen Dank! – Zeokav

0

Sie sollten den Index als Parameter Ihres Steckplatzes hinzufügen. Sie können diesen Index verwenden, um auf die Liste zuzugreifen

Ihr Code sollte eine Sache wie diese sein.

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

Verwandte Themen