QT 实现图片查看工具

news2024/12/23 10:32:33

QT 实现图片查看工具

在这里插入图片描述

1、选择图像文件

  • 单文件选择 QFileDialog::getOpenFileName
  • 多文件选择 QFileDialog::getOpenFileNames
QList<QString> imageNames = QFileDialog::getOpenFileNames(this,tr("打开图片"),"",tr("图片文件 (*.png *.jpg *.bmp *.jpeg)"));

2、选择文件夹, 列出图像

  • QFileDialog::getExistingDirectory
QString folderName = QFileDialog::getExistingDirectory(this,"打开文件夹","");
    // 创建 QDir 对象
    QDir dir(folderName);

    // 设置过滤器 - 只获取文件,忽略子目录
    //dir.setFilter(QDir::Files);

    // 获取该目录下的所有文件
    QFileInfoList fileList = dir.entryInfoList();

    // 遍历并输出文件名
    foreach (QFileInfo fileInfo, fileList) {
   
        QString fileName = fileInfo.fileName();
        if(fileName.endsWith(".png")
            ||fileName.endsWith(".jpg")
            ||fileName.endsWith(".bmp")
            ||fileName.endsWith(".jpeg"))
        {
   
            images.append(fileName);
        }
    }

3、图片显示

1、Label显示图片

QPixmap pixmap(images[ImageIndex]);
pixmap = pixmap.scaled(imgCtrl->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
imgCtrl->setPixmap(pixmap);
imgCtrl->setAlignment(Qt::AlignCenter);

2、QPainter 显示图片


// 创建一个QPainter,用于绘制图片
QPainter painter(this);
painter.setRenderHint(QPainter::SmoothPixmapTransform);  // 开启平滑缩放

// 计算缩放后的图片尺寸
QSize scaledSize = pixmap.size() * scaleFactor;

// 绘制图片,应用缩放和偏移量
painter.drawPixmap(offset, pixmap.scaled(scaledSize, Qt::KeepAspectRatio, Qt::SmoothTransformation));

4、事件

1. 处理鼠标事件

要处理鼠标事件,可以重载以下鼠标相关的事件处理函数:

mousePressEvent(QMouseEvent *event): 处理鼠标按下事件。
mouseReleaseEvent(QMouseEvent *event): 处理鼠标释放事件。
mouseMoveEvent(QMouseEvent *event): 处理鼠标移动事件。
mouseDoubleClickEvent(QMouseEvent *event): 处理鼠标双击事件。

2. 处理键盘事件

要处理键盘事件,可以重载以下键盘相关的事件处理函数:

keyPressEvent(QKeyEvent *event): 处理键盘按下事件。
keyReleaseEvent(QKeyEvent *event): 处理键盘释放事件。

3、实现Label图片移动

void Widget::mousePressEvent(QMouseEvent *event)
{
   
    if (event->button() == Qt::LeftButton) {
   
        isDragging = true;                 // 标记为正在拖动
        lastMousePosition = event->pos();  // 记录鼠标按下时的位置
    }
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
   
    if (isDragging) {
   
        // 计算鼠标移动的距离 (偏移量)
        QPoint pos = event->pos();
        QPoint delta = pos - lastMousePosition;

        // 更新图片的位置 (移动图片)
        imgCtrl->move(imgCtrl->pos() + delta);

        // 更新鼠标位置,以便下一次移动时计算新的偏移量
        lastMousePosition = event->pos();
    }
}


void Widget::mouseReleaseEvent(QMouseEvent *event)
{
   
    if (event->button() == Qt::LeftButton) {
   
        isDragging = false;  // 结束拖动

    }
}

4、QPainter实现图片移动和缩放

  • ImageWidget 需要拆分出去,拆分成ImageWidget,h 和 ImageWidget.cpp
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QPixmap>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STM32 Blue Pill编程实例】-OLED显示DHT22传感器数据

OLED显示DHT22传感器数据 文章目录 OLED显示DHT22传感器数据1、DHT22介绍2、硬件准备与接线3、模块配置3.1 定时器配置3.2 DHT22引脚配置3.3 OLED配置4、代码实现在本文中,我们将介绍如何将 DHT22 温度和湿度传感器与 STM32 Blue Pill 开发板连接,并使用 HAL 库在 STM32CubeI…

车载音频焦点(二)

目录 1 可延迟的音频焦点 2 多音频区焦点管理 3 HAL 音频焦点 4 OEM 车载音频焦点服务 1 可延迟的音频焦点 在 Android 11 中,AAOS 开始支持请求获得可延迟的音频焦点。 当非瞬态焦点请求 与 当前焦点持有者交互 遭到拒绝时,前者可以延迟。 一旦焦点的变化导致延迟的请…

各省份自然灾害损失造成的直接经济损失数据(2009-2022年)

自然灾害是自然演变过程中不可避免的现象&#xff0c;它们对人类社会构成了巨大的威胁。中国作为一个自然灾害频发的国家&#xff0c;面临着种类繁多的灾害挑战&#xff0c;包括气象灾害、地质灾害、海洋灾害、生物灾害和森林草原火灾等。 数据来源&#xff1a;《中国环境统计…

数据分布过于集中 怎么办,python 人工智能 ,数据分析,机器学习pytorch tensorflow ,

数据分布过于集中&#xff0c;意味着数据的大部分值都聚集在某个特定区间内&#xff0c;这可能会导致统计分析的结果不够稳健&#xff0c;或者模型训练时出现过拟合等问题。针对这种情况&#xff0c;可以考虑以下几种方法来处理&#xff1a; 变换成 1. **数据转换**&#xff1…

笔记-stm32移植ucos

文章目录 一、UCOS的基础知识1.1 前后台系统:1.2 RTOS系统可剥夺型内核:前后台系统和RTOS系统 1.3 UCOS系统简介学习方法 二、ucossii移植Step1&#xff1a;在工程中建立存放UCOSS代码的文件夹UCOSIIStep2:向CORE文件夹添加文件Step3:向Config文件夹添加文件Step4:向port文件夹…

Knife4j-SpringBoot3-OpenAPI3:基本使用、生产环境关闭接口文档、配置文件、配置接口文档描述信息、OpenAPI3注解

版本&#xff1a; SpringBoot&#xff1a;3.3.3 Knife4j&#xff1a;4.5.0 创建时间&#xff1a;2024-10-08 一、官网 Knife4j 的 SpringBoot3 官方说明文档&#xff1a; https://doc.xiaominfo.com/docs/quick-start#spring-boot-3 springdoc官网&#xff1a;https://spring…

笔试强训day33

跳台阶扩展问题 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。 数据范围&#xff1a;1≤n≤201≤n≤20 进阶&#xff1a;空间复杂度 O(1)O(1) &#xff0c; 时间复杂度 O(1)O(1) 输入…

【EXCEL数据处理】000017 案例 保姆级教程,附多个操作案例。EXCEL Match和Index函数。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000017 案例 保姆级教程&#xff0c;附多个操作案例。…

MYSQL 事物隔离级别的区别与现象

事物的ACID属性本章不再赘述&#xff0c;本章主要描述事物的隔离级别及隔离级别导致的现象&#xff0c;日常工作中该如何选择MYSQL的隔离级别。 MYSQL事物的隔离级别及各隔离级别存在的问题如下&#xff1a; 隔离级别/问题脏读不可重复读幻读读未提交(Read-Uncommitted)✅✅✅…

JS 入门

文章目录 JS 入门一、JS 概述1、JS 特点2、JS 组成3、JS 初体验4、HTML引入JS 二、JS 基础语法1、变量声明2、基本数据类型3、引用数据类型1&#xff09;数组2&#xff09;对象3&#xff09;函数4&#xff09;null 4、运算符5、条件判断6、循环语句 三、JS 函数0、JS 函数特点1…

知识图谱入门——11:构建动态图谱渲染应用:Vue3与Neo4j的集成与实践

在知识图谱与大数据技术领域&#xff0c;构建动态图谱是一项非常重要的任务。这篇博客将带你深入了解如何利用Vue.js、D3.js以及Neo4j&#xff0c;开发一个能够实时渲染图谱节点和关系的应用。我们将从零开始&#xff0c;介绍如何搭建开发环境、安装依赖、与Neo4j数据库交互、到…

获取yolov8自带的数据集并开始训练

今天小编带大家学习一下YOLOv8 配置文件&#xff0c;用来定义不同数据集的参数和配置。这些文件包含了关于每个数据集的路径、类别数、类别标签等信息&#xff0c;帮助模型正确地加载和解析数据集&#xff0c;以便进行训练和推理。 具体来说&#xff0c;这些 YAML 文件的作用如…

各省份技术市场成交额数据(2001-2022年)

数据名称&#xff1a;各省份技术市场成交额数据数据年份&#xff1a;2001-2022年数据来源&#xff1a;《中国统计年鉴》字段说明&#xff1a; id&#xff1a;数据条目编号省份&#xff1a;中国各省份年份&#xff1a;2001-2022年技术市场成交额(万元)&#xff1a;表示该省份在特…

基于Springboot vue的流浪狗领养管理系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

Win10 IDEA连接虚拟机中的Hadoop(HDFS)

获取虚拟机的ip 虚拟机终端输入 ip a关闭虚拟机防火墙 sudo ufw disable修改Hadoop的core-site.xml文件 将localhost修改为虚拟机局域网IP # 位置可能不一样&#xff0c;和Hadoop安装位置有关 cd /usr/local/hadoop/etc/hadoop vim core-site.xmlIDEA 连接 创建Maven项目…

软考系统分析师知识点四:操作系统基本原理

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间为&#xff1a;11月9日。 倒计时&#xff1a;33天。 目标&#xff1a;优先应试&#xff0c;其次学习&#xff0c;再次实践。 复习计划第一阶段&#xff1a;扫平基础知识点&#xff0c;仅抽取有用信息&am…

如何删除或减少pagefile.sys?

您是否曾在计算机上遇到过一个名为 pagefile.sys 的超大文件&#xff1f; 许多 Windows 用户想知道 pagefile.sys 的用途以及如何在不影响系统性能的情况下有效地管理它。 本文将帮助您了解 pagefile.sys 是什么、它为什么会变大以及如何安全地管理它的大小。 什么是 pagefi…

基于UDP协议的网络通信

和TCP协议不同的是&#xff0c;UDP协议不需要进行稳定的连接即可直接对数据进行收发&#xff0c;即面向非连接的。所以UDP的应用场景在音视频流传输、在线游戏以及网络聊天室等实时传输需求大的背景。因为不需要建立连接&#xff0c;UDP的网络编程模型就比TCP简单许多。 接收端…

Qt - ui界面点击加载一段时间后闪退

Qt - ui界面点击加载一段时间后闪退 解决方案&#xff1a; 该路径下删除 widgetbox6.8.xml 文件即可&#xff0c;然后重新打开 QT 就可以成功打开 UI 界面了

【2024最新】基于springboot+vue的交流互动系统lw+ppt

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…