2013-08-07 10 views
7
{ 
... 
    nrow = 10;  
    ncol = 1; 

    /*create QListView */ 
    m_listView = new QListView(this); 
    m_listView->setGeometry(QRect(QPoint(0,100), QSize(100, 150))); 

    QStandardItemModel *model = new QStandardItemModel(nrow, 1, this); 

    //fill model value 
    for(int r=0; r<nrow; r++) 
    { 
     QString sstr = "[ " + QString::number(r) + " ]"; 
     QStandardItem *item = new QStandardItem(QString("Idx ") + sstr); 
     model->setItem(r, 0, item); 
    } 

    //set model 
    m_listView->setModel(model); 
    m_listView->setSelectionMode(QAbstractItemView::ExtendedSelection); 
    connect(m_listView, SIGNAL(pressed(QModelIndex)), this, SLOT(hItem(QModelIndex))); 
} 

void MainWindow::hItem(QModelIndex m) 
{ 
    QItemSelectionModel *selectionModel = m_listView->selectionModel(); 

    m_txt2->setText(QString::number(selectionModel->selectedIndexes().at(0),'d',0));//??? 

    //not sure how to get the items selected: index and string per selection  
} 

risposta

18

Ho appena testato questo per le mie esigenze e funziona in Qt 5.1.

Sono abbastanza nuovo per C++ così in questa linea:

foreach(const QModelIndex &index, list){ 

Non so se è necessario l'const e il dereferenziazione (&) - Funziona con o senza. L'ho acciottolato insieme da vari esempi che ho visto.

Forse qualcuno che capisce meglio C++ può commentare.

void MainWindow::on_keywordsList_clicked(const QModelIndex &index) 
{ 
    QModelIndexList list =keywordListView->selectionModel()->selectedIndexes(); 

    QStringList slist; 
    foreach(const QModelIndex &index, list){ 
     slist.append(index.data(Qt::DisplayRole).toString()); 
    } 
    qDebug() << slist.join(","); 
} 
+3

const ref è migliore. e lo rende più veloce, const rende sicuro contro la modifica involontaria del contenitore originale. –