С++ QListView со значками и сигналами на выбранных элементах

У меня есть QListview, где я установил модель. Модель содержит QList. Теперь я хочу получить содержимое QListview при нажатии на элемент. Но я не знаю, как это сделать? С помощью некоторых руководств, которым я следовал, я могу отобразить два элемента в QListview следующим образом. Но я не знаю, как заставить его работать?? Пожалуйста, помогите. Код, который я работаю, выглядит следующим образом.

listviewmodel =new QListView;
listviewmodel->setModel( createModel() );
listviewmodel->setViewMode(QListView::IconMode);
listviewmodel->setIconSize(QSize(size().width()/8, size().height()/8));

connect(listviewmodel,SIGNAL(clicked(const QModelIndex)),this,SLOT(ItemClicked(QModelIndex)));

QAbstractItemModel *MainWindow::createModel()
{
    QStandardItemModel *model = new QStandardItemModel();

    QList<QStandardItem *> listItem;

    QStandardItem *item2 = new QStandardItem();
    item2->setIcon(QIcon(QPixmap::fromImage(qimages2)));
    listItem << item2;


    QStandardItem *item1 = new QStandardItem();
    item1->setIcon(QIcon(QPixmap::fromImage(qimages1)));
    listItem << item1;

    model->appendColumn(listItem);

return model;

}


void MainWindow::ItemClicked (QModelIndex index )
{    
   textEdit->setText(index.data().toString());
}

person user3538273    schedule 15.04.2015    source источник


Ответы (1)


Я проверил ваш код в QtCreator, и он работает так, как вы описали. Так в чем проблема? Вы получаете какие-то ошибки? Может быть, вы не поместили объявление ItemClicked(QModelIndex) под public slots:? Вы уверены, что connect возвращает true? Попробуйте проверить это:

bool success = connect(listviewmodel,SIGNAL(clicked(const QModelIndex)),this,SLOT(ItemClicked(QModelIndex)));
Q_ASSERT(success);

РЕДАКТИРОВАТЬ: Если вы хотите отображать только значки в QListView и получать некоторую текстовую информацию после нажатия на указанный элемент, вы можете сделать это следующим образом:

item2->setIcon(QIcon(QPixmap::fromImage(qimages2)));
item2->setData("informations about item2", Qt::UserRole);

(...)

void MainWindow::ItemClicked (QModelIndex index )
{
    QString data = index.data(Qt::UserRole).value<QString>();
    ui->textEdit->setText(data);
}
person trivelt    schedule 15.04.2015
comment
На самом деле у меня была функция ItemClicked() в приватных слотах. Но я не думаю, что это проблема. На самом деле, как я уже говорил ранее, у меня есть значок изображения в моем списке, поэтому всякий раз, когда я нажимаю любой значок изображения, мне нужна информация и подробности, стоящие за ним. Но я ничего не получаю при нажатии. текстовое редактирование пусто. - person user3538273; 15.04.2015
comment
Но какую информацию вы хотите отобразить в textEdit? Очевидно, что это поле остается пустым, если вы не задали текст в элементах списка. - person trivelt; 15.04.2015