首页 > 其他分享 >QtQuick实现图片查看器

QtQuick实现图片查看器

时间:2024-05-30 22:21:54浏览次数:23  
标签:QtQuick 查看器 image source import Image 图片

QtQuick实现图片查看器

介绍

图片查看器是非常值得新手入门QtQuick的项目,通过该项目,用户可以很快熟悉QML语法和资源文件存储,还可以使用通过操作文件夹实现多图像查看。

实战

首先打开QtCreator,创建QtQuick项目,我使用的是Qt6.5版本,但是其他版本应该也可以。

我们先新建一个QML文件,命名为ImageView.qml,代码如下:

import QtQuick
import QtQuick.Controls

Item {
    Image{
        id: image_view
        source: "图片路径"
        anchors.fill: parent
    }
}

然后我们在Main文件中引用它:

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("ImageViewer")

    ImageView {
        anchors.fill: parent
    }
}

此时我们发现,图片被拉伸填充满整个画面,这使得原图变得失真,我们可以通过设置Image的fillModel来改变图片的填充显示格式,可取值如下:

Model 作用
Image.Stretch 图片拉伸自适应;(默认的)
Image.PreserveAspectFit 按比例缩放,不裁剪
Image.PreserveAspectCrop 均匀缩放,必要时裁剪
Image.Tile 像贴瓷砖一样
Image.TileVertically 水平拉伸,垂直平铺
Image.TileHorizontally 垂直拉伸,水平平铺
Image.Pad 原始图像不做处理

我们将图像的fillMode值设置为 Image.PressveAspectFit,这样图像就能按比例适应窗口了。

ImageView.qml

import QtQuick 2.12

Item {
    Image {
        id: image_view
        source: "图片路径"
        anchors.fill: parent
        fillMode: Image.PreserveAspectFit //设置图片填充模式
    }
}

但是我们只能静态地显示图片,不能在运行后动态的更改图片,这时,我们可以添加事件,打开文件窗口来选择我们要显示的图片。

首先我们定义一个文件对话框FileDiaolg

FileDialog {
        id: image_dialog
        nameFilters: ["(*.jpg)","(*.png)"]
        onAccepted: {
            image_view.source = selectedFile
        }
    }

它可以打开文件系统选择文件,nameFilters属性用于指定文件系统中显示的文件类型,当用户点击文件后,会触发Accepted事件,通过处理这个事件,我们将选定的文件地址(selecteFile)赋值给image_view的source,这样image_view的图片源就会改变。

我们创建一个菜单组件,添加MenuItem用于打开这个文件对话框,添加鼠标右击事件来弹出这个对话框

Menu {
        id: image_menu

        MenuItem{
            text: "打开图片"
            onTriggered: {
                image_dialog.open() // 触发打开文件对话框事件
            }
        }
    }

MouseArea {
        anchors.fill: parent
        acceptedButtons: Qt.LeftButton | Qt.RightButton; //允许接收左键和右键
        onClicked: function(mouse){
            if(mouse.button === Qt.RightButton){ // 如果按下右键,触发事件
                image_menu.popup()
            }
        }
    }

这样,一个基本的图片查看器就完成了,不过这样还不够,我们还能添加一些简单的图片编辑功能,比如放大、缩小.
后续更新...

所有代码:

ImageView.qml

import QtQuick 2.12
import QtQuick.Dialogs
import QtQuick.Controls
Item {

    property alias source: image_view.source
    Image {
        id: image_view
        source: "图片路径"
        anchors.fill: parent
        fillMode: Image.PreserveAspectFit
    }



    FileDialog {
        id: image_dialog
        nameFilters: ["(*.jpg)","(*.png)"] //指定显示的文件类型
        onAccepted: {
            image_view.source = selectedFile
        }
    }

    Menu {
        id: image_menu
        // visible: false
        MenuItem{
            text: "打开图片"
            onTriggered: {
                image_dialog.open() // 触发打开文件对话框事件
            }
        }

        MenuItem{
            text: "放大"
            onTriggered: {

            }
        }
    }

    MouseArea {
        anchors.fill: parent
        acceptedButtons: Qt.LeftButton | Qt.RightButton; //允许接收左键和右键
        onClicked: function(mouse){
            if(mouse.button === Qt.RightButton){ // 如果按下右键,触发事件
                image_menu.popup()
            }
        }
    }

}

Main.qml

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("ImageViewer")

    ImageView {
        anchors.fill: parent
    }
}

标签:QtQuick,查看器,image,source,import,Image,图片
From: https://www.cnblogs.com/runtimeerror/p/18223365

相关文章

  • SwiftUI中AsyncImage的使用(一个高效的异步下载图片组件)
    iOS开发者经常会遇到需要在应用中显示网络图像的场景,无论是获取和显示用户头像,展示产品图像,等等。在原来的UIKit中,如果我们要用系统的API还是稍微有点麻烦,很多开发的朋友都选择了第三方的框架去处理网络图片的请求缓存等等。AsyncImage是SwiftUI中一个强大的功能,它简化了在......
  • 分割pdf为图片
    周胡林庄郭罗杨周罗冯#姜唐魏宋姜邓曾周胡林庄郭罗庄马刘陈杨张庄朱郑陈郭罗_林刘杨_罗庄_李胡林(林刘杨_林王罗黄,庄宋罗林宋罗_杨庄孙刘陈郭):"""将姜邓曾文件的每一页转换为('林朱赵','林朱胡','林赵胡','林林胡','林李胡','林王胡','林马刘',......
  • 图片去水印工具(低调用哦)
    一、简介1、它是一款专业的图像编辑工具,旨在帮助用户轻松去除照片中不需要的元素或修复照片中的缺陷。无论是修复旧照片、消除拍摄时的不良构图,还是删除照片中的杂乱元素,都能帮助用户快速实现这些目标。其功能强大且操作简单,使得使用者可以轻松实现图像编辑的各种需求。使用......
  • vue3 require动态加载图片及动态加载svg图
    以下是本地图片及引用本地的svg图报错//这里是获取本地的png图片报错<divclass="flex-itemsswiper-item"v-for="(item,index)inlist":key="index"><imgclass="brand-img":src="require(item.url)"/></......
  • 软件工程小米便签新增功能之--插入图片
     【软件应用开发】小米便签APP维护开发_小米便签二次开发-CSDN博客本文章旨在对上述文章一对一详细介绍,以方便入门的萌新使用:    我们规划一下,一。我们介绍一点小技巧:    1.搜索:双击shift可以搜索,在末尾最后一步的时候有示例。    2.自动改错:停......
  • uniapp微信小程序使用瀑布流结合z-panging组件显示pexels的图片
    最终效果如下:  瀑布流组件用的:https://ext.dcloud.net.cn/plugin?id=7594下拉刷新组件用的:https://z-paging.zxlee.cn这两个搭配起来省了很多事z-paging中组合custom-waterfalls-flow,可下拉刷新、到底自动加载下一页。下拉刷新效果: 到底自动加载下一页效果: ......
  • 【Android图片框架】都用Kotlin协程了,快来试试Coil~
    回顾一下Glide        Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道(decodepipeline),以及自动的资源池技术。Glide支持拉取,解码和展示视频快照,图片,和GIF动画。Glide的Api是如此的灵活,开发者甚至可以......
  • 导出离校单,单个word, word转pdf, word里面有图片
    引入@AutowiredprivateHttpServletResponseresponse;@AutowiredprivateHttpServletRequestrequest;实现类导出单个word点击查看代码publicvoidexportStudentWordOld(JcsjLxxsxxDTOjcsjLxxsxxDTO){ StringschoolName=jcsjLxxsglVOMapper.querySchoolName(); ......
  • python 把指定的一张图片 改为 jpg dpi 300
    使用了Python的Pillow库fromPILimportImageImage.MAX_IMAGE_PIXELS=2000000000#设置最大处理像素极限defconvert_image_to_jpg(input_path,output_path,dpi=300):withImage.open(input_path)asimg:#设置DPIimg.info['dpi']=(dpi,dp......
  • 通栏中不定数量的图片/轮播自适应宽高的简单示例
    最近接到一个需求,在一个页面会有多个通栏,每个通栏中会有不固定数量的图片或轮播图,要求各图片/轮播要同等比例自适应宽高,写成通用代码。示意图:光是图片好说,其中有swiper就会比较麻烦。代码:<divclass="container"><divclass="zt_banner"><divclass="swiper">......