带有图标的C ++ QListView和点击项目上的信号

时间:2015-04-15 02:23:33

标签: c++ qt user-interface 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());
}

1 个答案:

答案 0 :(得分: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);
}