2015-04-15 4 views
0

У меня есть QListview, где я установил модель. Модель содержит QList. Теперь я хочу получить содержимое QListview при нажатии на элемент. Но я не знаю, как это сделать? Через некоторые обучающие программы, которые я последовал, я могу получить два элемента в QListview следующим образом. Но я не знаю, как заставить его работать? Пожалуйста, помогите. Код, который я работаю следующим образом.C++ 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()); 
} 

ответ

0

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

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

EDIT: Если вы хотите отобразить только значки на 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); 
} 
+0

На самом деле, у меня была функция ItemClicked() в частных слотах. Но я не думаю, что это проблема. Фактически, как я сказал ранее, у меня есть значок изображения в моем списке, поэтому всякий раз, когда я нажимал значок любого изображения, я хочу, чтобы информация и детали были за ним. Но я ничего не нажимаю. редактирование текста пуст. – user3538273

+0

Но какую информацию вы хотите отображать в 'textEdit'? Очевидно, что это поле остается пустым, если вы не задали текст в элементах списка. – trivelt