Day41 使用listwidget制作简易图片播放器

1.简介

使用QlistWidget实现简易图片播放器,可以打开一个图片序列,通过item的单击事件实现图片的切换,通过设置list的各种属性实现图片预览的显示,美化滚动条即可实现一个简易图片播放器。


2.效果

3.实现步骤:

1.初始化界面部件,主要是设置list为水平滚动模式并且关闭自动换行,这样他可以一直将所有图片显示在一行中,效果为图片播放器的预览窗口。然后设置view mode为图标模式,禁止拖动复制,具体属性在代码部分可见。

    ui->listWidget->setHorizontalScrollMode(QAbstractItemView::ScrollPerItem); // 设置水平滚动模式为每个item滚动
    ui->listWidget->setWordWrap(false); // 开启自动换行
    ui->listWidget->setFlow(QListView::TopToBottom);
    ui->listWidget->setViewMode(QListWidget::IconMode);//设置为图标显示方式
    ui->listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    ui->listWidget->setIconSize(QSize(200,150));
    ui->listWidget->setSpacing(10);
    ui->listWidget->setDragDropMode(QAbstractItemView::NoDragDrop); // 禁止拖动复制

2.设置滚动条样式表

horizontalScrollBar = ui->listWidget->horizontalScrollBar();
    QString styleSheet = "QScrollBar:horizontal {"
                        "    border: 2px solid #999999;"
                        "    background: #f0f0f0;"
                        "    height: 15px;"
                        "    margin: 0px 22px 0px 22px;"
                        "    border-radius: 7px;"
                        "}"
                        "QScrollBar::handle:horizontal {"
                        "    background: #666666;"
                        "    min-width: 20px;"
                        "    border-radius: 7px;"
                        "}"
                        "QScrollBar::add-line:horizontal {"
                        "    width: 20px;"
                        "    subcontrol-position: right;"
                        "    subcontrol-origin: margin;"
                        "    border-image: url(:/images/arrow_right.png);"
                        "}"
                        "QScrollBar::sub-line:horizontal {"
                        "    width: 20px;"
                        "    subcontrol-position: left;"
                        "    subcontrol-origin: margin;"
                        "    border-image: url(:/images/arrow_left.png);"
                        "}";
    horizontalScrollBar->setStyleSheet(styleSheet);

3.通过按钮弹出文件选择对话框,选择各种类型的图片。

QStringList paths = QFileDialog::getOpenFileNames(this,"Seclect img","D:\\", tr("ALL Files (*.jpg *.jpeg *.png *.bmp);;JPEG Files (*.jpg *.jpeg);;PNG Files (*.png);;GIF Files (*.gif);;BMP Files (*.bmp)"));

4.将所有的图片加载成item项,同时滚动条可以根据图片内容自动调整大小。

totalNumber = paths.size();
    //序列显示
    for(int i = 0; i < totalNumber; i++) {
        QFileInfo fileInfo(currentPaths.at(i));
        qDebug()<<"currentPaths"<<fileInfo.fileName();
        QListWidgetItem *signalPicItem=new QListWidgetItem(QIcon(currentPaths.at(i)),fileInfo.fileName());
        ui->listWidget->addItem(signalPicItem);
    }

5.连接item单击事件,完成图片的切换操作。

QObject::connect(ui->listWidget, &QListWidget::itemClicked, [&](QListWidgetItem *item) {
            // 在这里处理项目单击事件
            setCurrentImage(ui->listWidget->row(item));
            qDebug() << "Clicked item text:" << item->text()<<ui->listWidget->row(item);
        });

6.中心部分的显示区域由Qlabel完成图片的显示。

void MainWindow::setCurrentImage(int index)
{
    QString path = currentPaths.at(index);
    QPixmap pix(path);
    ui->label->setPixmap(path);
    ui->listWidget->setItemSelected(ui->listWidget->item(index), true);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/199487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 Python(NumPy 和 OpenCV)对图像进行 Funkify

如何使用 Python&#xff08;NumPy 和 OpenCV&#xff09;对图像进行 Funkify 作者|Luke Tambakis 编译|Flin 来源|medium 在这篇博客中&#xff0c;我将解释如何制作一个 Python 脚本来使用 Python 代码“funkify”图像。该程序速度足够快&#xff0c;甚至可以处理实时视频&am…

【Java Spring】Spring MVC基础

文章目录 1、Spring MVC 简介2、Spring MVC 功能1.1 Spring MVC 连接功能2.2 Spring MVC 获取参数2.2.1 获取变量2.2.2 获取对象2.2.3 RequestParam重命名后端参数2.2.4 RequestBody 接收Json对象2.2.5 PathVariable从URL中获取参数 1、Spring MVC 简介 Spring Web MVC是构建于…

低压三相无刷直流驱动芯片GC5958,无感,正弦,低压,PWM调速可替代APX9358/茂达

GC5958提供了无传感器的三相无刷直流电机的速度控制的所有电路。正弦波驱动器的方法将是更好的低噪声。控制器功能包括启动电路、反电动势换向控制、脉宽调制 (PWM) 速度控制锁定保护和热关断电路GC5958适用于需要静音驱动程序的游戏机和CPU散热器。它以DFN3x3-10封装形式展现。…

深入理解虚拟 DOM:提升前端性能的关键技术

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Maven 介绍

文章目录 什么是 maven为什么要选择mavenmaven 仓库什么是maven中央仓库什么是maven本地仓库 idea如何创建出maven项目如何引入第三方库依赖配置国内源 下载 Maven Helper 插件查看各个项目之间的依赖关系 什么是 maven Maven是 Apache 下的一个纯 Java 开发的开源项目&#x…

鼎捷副总裁谢丽霞:从四大趋势来看,数智时代企业如何加速研发创新

目录 导读 01 研发创新 势不可挡 ① 从逆向设计走向正向设计 ② 从专业协助走向全面协同 ③ 从单点场景走向业务闭环 ④ 从知识管理走向知识工程 02 鼎捷雅典娜 数智驱动企业新未来 03 鼎捷PLM 赋能企业研发创新 导读 研发&#xff0c;企业长青的必备源动能。如何在…

游戏录屏怎么录?学会这几招,轻松搞定!

电子游戏已成为人们日常生活中重要的娱乐方式之一&#xff0c;许多玩家希望在游戏的过程中录制一些精彩的瞬间&#xff0c;或与他人分享自己的游戏体验&#xff0c;因此游戏录屏成为了一种普遍的需求。可是游戏录屏怎么录呢&#xff1f;在本文中&#xff0c;我们将为大家介绍两…

OpenGL笔记:纹理的初次使用

说明 纹理的代码写完后&#xff0c;一直出不来结果&#xff0c;原因是没有设置GL_TEXTURE_MIN_FILTER&#xff0c; 它的默认值为GL_NEAREST_MIPMAP_LINEAR&#xff0c; 因为这里我还没用到Mipmap&#xff0c;所以使用这个默认值&#xff0c;结果是错误的&#xff0c;关于mipma…

Paragon NTFS16Mac读写外置移动硬盘专业工具

Paragon NTFS for Mac16是一款非常不错的Mac读写工具&#xff0c;解决了大部分Mac电脑用户无法读取移动硬盘的困扰&#xff0c;Paragon NTFS for 16版一直是Mac OS平台上最受欢迎的NTFS硬盘格式读取工具&#xff0c;有了NTFS for Mac &#xff0c;安装了双系统的Mac用户可以在O…

从Android面试题目溯源-1、创建线程有那几种方式

概念 程序执行流的最小单位&#xff0c;处理器调度调度和分派的基本单位。 如何理解这个概念 如下图&#xff0c;可以简单类比吉他&#xff0c;六根弦代表六个线程&#xff0c;每个线程独立且单独运行&#xff0c;且持有上一个音的状态&#xff0c;每根手指可类比为一个CPU的…

C#开发的OpenRA游戏之属性SelectionDecorations(12)

C#开发的OpenRA游戏之属性SelectionDecorations(12) 前面分析了显示选择框的指示器类SelectionBoxAnnotationRenderable,它的作用就是画一个四个角的方角。 这个类是在属性SelectionDecorations里调用的,如下: protected override IEnumerable<IRenderable> Rende…

企业如何选择安全又快速的大文件传输平台

在现代信息化社会&#xff0c;数据已经成为各个行业的重要资源&#xff0c;而数据的传输和交换则是数据价值的体现。在很多场合&#xff0c;企业需要传输或接收大文件&#xff0c;例如设计图纸、视频素材、软件开发包、数据库备份等。这些文件的大小通常在几百兆字节到几十个字…

交流负载的原理与应用

交流负载是指能够消耗交流电能的设备或系统&#xff0c;在电力系统中&#xff0c;交流负载是不可或缺的一部分&#xff0c;它们将电能转化为其他形式的能量&#xff0c;以满足人们生产和生活的需求。交流负载的原理与应用涉及到许多方面&#xff0c;包括电气工程、电子技术、自…

数据库系统概述之国产数据库

当今世界&#xff0c;数据已成为重要的生产要素&#xff0c;数据库管理系统更是广泛应用于信息化行业各领域&#xff0c;国内数据库产业能否健康可持续的发展&#xff0c;在很大程度上影响着国民经济发展和网络空间安全。 当前&#xff0c;国产数据库行业竞争非常激烈&#xf…

Docker 安装kafka 并创建topic 进行消息通信

Apache Kafka是一个分布式流处理平台&#xff0c;用于构建高性能、可扩展的实时数据流应用程序。本文将介绍如何使用Docker容器化技术来安装和配置Apache Kafka。 一、使用镜像安装 1、kafka安装必须先安装Zookpper 2、下载镜像 docker pull wurstmeister/kafka 3、查看下载…

万户协同办公平台ezoffice SendFileCheckTemplateEdit.jsp接口存在SQL注入漏洞 附POC

@[toc] 万户协同办公平台ezoffice SendFileCheckTemplateEdit.jsp接口存在SQL注入漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文…

Leetcode—1670.设计前中后队列【中等】

2023每日刷题&#xff08;四十三&#xff09; Leetcode—1670.设计前中后队列 实现代码 erase(iterator position)在删除vector中的元素后&#xff0c;会将该元素的后面所有元素都往前挪一位。因此&#xff0c;原先的迭代器指向的元素就不是原来那个了&#xff0c;而是它的后…

Phpstudy v8.0/8.1添加 php-7.4.9

1、官网下载最新的php版本 打开Windows版的官网下载&#xff0c;地址&#xff1a;PHP For Windows: Binaries and sources Releases 页面上有不同的PHP版本&#xff0c;这里我们下载的是64位nts版的PHP7.4.9&#xff0c;php-7.4.9-nts-Win32-vc15-x64.zip。 2、解压下载的文…

推荐一款好用的BMP转PNG工具BMP2PNG

推荐一款好用的BMP转PNG工具BMP2PNG 自己写的一个BMP转PNG工具BMP2PNG 写这个工具是因为要使用传奇的部分素材在COCOS2DX使用&#xff0c; 但是COCOS2DX不支持BMP 如果直接将BMP转换到PNG的话&#xff0c;网上找到的工具都不支持透明色转换。难道要用PS一个一个抠图吗&#xf…

网络聊天室项目

服务器端 #include <myhd.h>//传输结构体 struct cli {char type; // L/C/Qchar name[20];char text[128]; }; int main(int argc, const char *argv[]) {if(argc!3){printf("请输入ip地址和端口号\n");return -1;}//1、创建用于通信的套接字文件描述符in…