Как получить индекс или строку строки, выбранной в QListView?

Не знаете, как отобразить выбранный элемент или индекс в списке?

{
...
    nrow = 10;     
    ncol = 1;

    /*create QListView */
    m_listView = new QListView(this);
    m_listView->setGeometry(QRect(QPoint(0,100), QSize(100, 150)));
    connect(m_listView, SIGNAL(clicked(QModelIndex)), this, SLOT(hItem()));

    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);
    }
}

void MainWindow::hItem()
{
    m_txt1->setText(item@clicked);
}

person jdl    schedule 06.08.2013    source источник
comment
Похоже, вы знаете достаточно, чтобы понять, что сигнал передает QModelIndex в качестве параметра. Просто пусть ваш слот действительно примет это. QModelIndex имеет методы row(), column() и data(), среди прочих.   -  person Igor Tandetnik    schedule 07.08.2013
comment
m_txt1->setText(QString::number(m.row(),'d',0));//РАБОТАЕТ........НО m_txt2->setText(m.data());// НЕУДАЧА   -  person jdl    schedule 07.08.2013
comment
data() возвращает QVariant. Вероятно, вам нужно что-то вроде setText(m.data().toString())   -  person Igor Tandetnik    schedule 07.08.2013
comment
Полезно знать для множественного выбора: listView->setSelectionMode( QAbstractItemView::ExtendedSelection );   -  person jdl    schedule 07.08.2013
comment
stackoverflow.com/questions/15777159/   -  person jdl    schedule 07.08.2013


Ответы (1)


Сигнал, испускаемый QListView, имеет объект QModelIndex в качестве параметра. Отредактируйте свой слот, чтобы он соответствовал сигнатуре сигнала: void MainWindow::hItem(QModelIndex idx).

С вашим объектом QModelIndex вы можете получить строку, по которой щелкнули, используя column() или row(). См. здесь: http://harmattan-dev.nokia.com/docs/library/html/qt4/qmodelindex.html

person Xaqq    schedule 06.08.2013
comment
m_txt1->setText(QString::number(m.row(),'d',0));//РАБОТАЕТ........НО m_txt2->setText(m.data());// НЕУДАЧА - person jdl; 07.08.2013