Qt5.9中使用列表控件QListWidget显示缩略图(完全模仿Windows图片视图文档)

本文主要是介绍Qt5.9中使用列表控件QListWidget显示缩略图(完全模仿Windows图片视图文档),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文主要用关键代码,介绍用Qt的QListWidget控件显示缩略图,实现图片底端居中对齐,文字顶端居中对齐。(提醒:可以直接跳过从后面的步骤1.1开始看起)

 

注意关键函数用法总结:

void QListWidget::addItem(QListWidgetItem *aitem):QListWidget添加QListWidgetItem项。

QListWidgeItem::setIcon(QIcon):设置QListWidgeItem项的图标。

QListWidgeItem::setTxt(QString):设置QListWidgeItem项的内容,通常和setIcon()函数搭配使用,上面是图标下面是文字。

void setSizeHint(const QSize &size):设置QListWidgeItem项的单元格大小。如果把每一个QListWidgeItem等同于与一个QPushbutton按钮,则该函数可以理解为设置QPushbutton按钮的尺寸大小,因为每一个QListWidgeItem项都可以跟按钮一样实现触发和鼠标滑过,被选中功能。

void itemClicked(QListWidgetItem *item):单击QListWidgeItem项时触发一个信号。可以通过函数QListWidget::row(item)在获取当前选中的是哪一个QListWidgetItem 项。注意:加入有九宫格排列的QListWidgetItem,其在QListWidget中的排列顺序是从左到右,从上到下进行排序的。即:

0  1  2

3  4  5

6  7  8

 

void setItemWidget(QListWidgetItem *item, QWidget *widget):将QListWidgetItem和QWidget关联起来,其中QWidget可以是一个QWidget,也可以是一个QPushbutton按钮。

 

列表控件QListWidge主要是通过包含一系列的QListWidgeItem项来进行显示,换句话说,列表控件QListWidge是QListWidgeItem项的集合。其中,列表控件QListWidge包含QListWidgeItem项主要用到函数void QListWidget::addItem(QListWidgetItem *aitem);下面是一个具体示例。

listWidget->addItem(listWidgetItem);

所以,我们要实现的是在每一个QListWidgeItem项中显示上面是图片,下面是文字。如果要显示的图片大小是固定的,可以直接用函数QListWidgeItem::setIcon(QIcon)和函数QListWidgeItem::setTxt(QString)来实现。两个函数的用法跟QPushbutton的用法一模一样,可以直接把QListWidgeItem当成一个按钮来处理就好。

但是,现在要求显示的图片大小是任意的,而显示图片的位置是在一个给定的方框内。要实现这种方式显示图片,第一步就是在每一个QListWidgeItem项中嵌入一个QWidget,然后再在这个QWidget中实现任意想要的效果。比如图片底端居中对齐,文字顶端居中对齐。QListWidgeItem项中嵌入一个QWidget需要用到函数void setItemWidget(QListWidgetItem *item, QWidget *widget):

void setItemWidget(QListWidgetItem *item, QWidget *widget);

下面是一个应用实例:

listWidget->setItemWidget(listWidgetItem,itemWidget);

 

1.1实现上述功能,只需要调用下面两个函数即可实现。

initListWidget();
createListWidget();

 

函数initListWidget()定义如下:

void QWidget::initListWidget()
{ICON_SIZE = QSize(210,210);CELL_SIZE = QSize(210,210);listWidget = new QListWidget(this);stackWidgetLayout->addWidget(listWidget);listWidget->setIconSize(ICON_SIZE);listWidget->setResizeMode(QListView::Adjust);listWidget->setViewMode(QListView::IconMode);listWidget->setMovement(QListView::Static);listWidget->setSpacing(10);listWidget->horizontalScrollBar()->setDisabled(true);imageLabel = new QLabel;imageLabel->setWindowTitle("TITLE");
}

 

函数createListWidget()定义如下:

void QWidget::createListWidget()
{listWidget->clear();//获取文件夹下的文件名称imagePath = "D:/image";QDir dir(imagePath);if (!dir.exists()) {return;}dir.setFilter(QDir::Files | QDir::NoSymLinks);QStringList filters;filters << "*.png" << "*.jpg";dir.setNameFilters(filters);list = dir.entryList();if (list.count() <= 0){return;}// 创建单元项for (int i = 0; i<list.count(); ++i){QPixmap pixmap(path + "\\" + list.at(i));QListWidgetItem *item = new QListWidgetItem;QWidget *widget = new QWidget;QVBoxLayout *widgetLayout = new QVBoxLayout;QLabel *imageLabel = new QLabel;QLabel *txtLabel = new QLabel(tr("%1").arg(list.at(i)));widget->setLayout(widgetLayout);widgetLayout->setMargin(0);widgetLayout->setSpacing(0);widgetLayout->addWidget(imageLabel);widgetLayout->addWidget(txtLabel);if(pixmap.width()>227||pixmap.height()>227){pixmap=pixmap.scaled(234,234,Qt::KeepAspectRatio);}imageLabel->setPixmap(pixmap);txtLabel->setFixedHeight(30);txtLabel->setWordWrap(true);item->setSizeHint(QSize(150,190));mainwidget->addItem(item);mainwidget->setSizeIncrement(150,190);mainwidget->setItemWidget(item,widget);}// 信号与槽connect(mainwidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(On_listWidgetItem(QListWidgetItem*)));
}

 

1.2实现的效果如下图所示:

 

 

 

 

 

参考内容:

https://blog.csdn.net/csdn1027192411/article/details/52123556(重点参考)

https://blog.csdn.net/qq_20991549/article/details/79524256(主要参考在QListWidget中嵌入QWidget用法)

这篇关于Qt5.9中使用列表控件QListWidget显示缩略图(完全模仿Windows图片视图文档)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/325434

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE