2015-04-15 56 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); 

编辑:如果你想在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()函数。但我不认为这是问题。实际上,正如我之前告诉的,我在ListView中有图像图标,所以无论何时单击任何图像图标,我都想要背后的信息和细节。但是我点击没有获得任何东西。文本编辑为空。 – user3538273

+0

但是你想在'textEdit'中显示什么信息?如果你没有在列表项中设置文本,这个字段显然是空的。 – trivelt