1、實現的效果如下:
2、實現代碼
(1)頭文件
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_QListViewDemo.h"
enum ListDataType
{
? ? ldtNone = -1,
? ? ldtOne = 0,
? ? ldtTwo = 1,
};
struct ListData
{
? ? QString strImgPath;
? ? ListDataType eListDataType;
? ? QString strText;
};
class QListViewDemo : public QMainWindow
{
? ? Q_OBJECT
public:
? ? QListViewDemo(QWidget *parent = Q_NULLPTR);
private:
? ? Ui::QListViewDemoClass ui;
? ? QList<ListData> m_lstData;
? ? QMap<QListWidgetItem* , ListDataType> m_mapWidget;
};
(2)實現文件
#include "QListViewDemo.h"
QListViewDemo::QListViewDemo(QWidget *parent)
? ? : QMainWindow(parent)
{
? ? ui.setupUi(this);
? ? ui.listWidget->setViewMode(QListView::ViewMode::IconMode);
? ? //ui.listWidget->setIconSize(QSize(80, 80));
? ? ui.listWidget->setResizeMode(QListWidget::Adjust);
? ? //ui.listWidget->setGridSize(QSize(150, 150));
? ? ui.listWidget->setSpacing(5);
? ? ui.listWidget->setMovement(QListWidget::Static);
? ? {
? ? ? ? ListData _ListData;
? ? ? ? _ListData.strImgPath = ":/QListViewDemo/images/1.png";
? ? ? ? _ListData.eListDataType = ldtOne;
? ? ? ? _ListData.strText = "Sample1";
? ? ? ? m_lstData.append(_ListData);
? ? }
? ? {
? ? ? ? ListData _ListData;
? ? ? ? _ListData.strImgPath = ":/QListViewDemo/images/1.png";
? ? ? ? _ListData.eListDataType = ldtTwo;
? ? ? ? _ListData.strText = "Sample2";
? ? ? ? m_lstData.append(_ListData);
? ? }
? ?for (int i = 0; i < m_lstData.size(); i++)
? ?{
? ? ? ?QListWidgetItem* imageItem = new QListWidgetItem;
? ? ? ?imageItem->setIcon(QIcon(m_lstData.at(i).strImgPath));
? ? ? ?imageItem->setSizeHint(QSize(100, 100));
? ? ? ?imageItem->setText(m_lstData.at(i).strText);
? ? ? ?ui.listWidget->addItem(imageItem);
? ? ? ?m_mapWidget[imageItem] = m_lstData.at(i).eListDataType;
? ?}
? ?connect(ui.listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(_slotitemClicked(QListWidgetItem*)));
}
點擊按鈕事件
public slots:
? ? void _slotitemClicked(QListWidgetItem* item);
實現函數如下
void QListViewDemo::_slotitemClicked(QListWidgetItem* item)
{
? ? auto itrFind = m_mapWidget.find(item);
? ? if (itrFind != m_mapWidget.end())
? ? {
? ? ? ? ListDataType eListDataType = itrFind.value();
? ? ? ? switch (eListDataType)
? ? ? ? {
? ? ? ? case ldtOne:
? ? ? ? {
? ? ? ? ? ? int yyy = 5;
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? case ldtTwo:
? ? ? ? {
? ? ? ? ? ? int yyy = 5;
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? }
? ? }
}