QML 圖像變換(縮放、平移、旋轉)

目錄

    • 引言
    • 相關閱讀
    • 基礎知識
    • 工程結構
    • 核心代碼解析
      • 示例1:圖像縮放(ImageScale.qml)
        • 代碼說明
        • 運行效果
      • 示例2:圖像平移(ImageTransform.qml)
        • 代碼說明
        • 運行效果
      • 示例3:圖像旋轉(ImageRotation.qml)
        • 代碼說明
        • 運行效果
    • 總結
    • 下載鏈接

引言

本文通過一個Qt Quick項目實例,演示如何使用QML實現常見的圖像變換效果。項目包含縮放、旋轉和平移三種基礎變換操作。

相關閱讀

  • Transform文檔:https://doc.qt.io/qt-6/qml-qtquick-transform.html

基礎知識

Qt Quick的Transform類型提供多種圖形變換能力:

  1. Rotation:實現旋轉變換,通過angle屬性控制旋轉角度
  2. Scale:控制縮放比例,支持x/y軸獨立縮放
  3. Translate:實現平面位移變換,通過x/y屬性設置偏移量

工程結構

qml_image_transform/
├── CMakeLists.txt        # 項目構建文件
├── Main.qml             # 主界面
├── ImageScale.qml       # 縮放示例
├── ImageRotation.qml    # 旋轉示例
├── ImageTransform.qml   # 平移示例
├── images.qrc           # 資源文件
└── images/              # 圖片資源目錄

核心代碼解析

示例1:圖像縮放(ImageScale.qml)

import QtQuick
import QtQuick.ControlsItem {width: 400height: 400Image {id: imagesource: "qrc:/images/deepseek-logo.png"width: 200height: 200anchors.centerIn: parent// 縮放控制property real imageScale: 1.0scale: imageScale// 縮放動畫Behavior on imageScale {NumberAnimation { duration: 200 }}}// 添加縮放控制滑塊Slider {anchors.bottom: parent.bottomwidth: parent.widthfrom: 0.1to: 3.0value: 1.0onValueChanged: image.imageScale = value}
}

這段代碼整體實現了一個簡單的圖片查看器界面,用戶可以通過拖動滑塊來動態調整圖片的縮放比例,并且縮放過程會有平滑的動畫效果。

代碼說明

縮放控制:

  • 定義了 imageScale 屬性控制縮放比例,默認值為 1.0。
  • 將圖片的 scale 屬性綁定到 imageScale,使其隨 imageScale 變化而縮放。
  • 使用 BehaviorNumberAnimation 實現縮放動畫效果。

縮放控制滑塊

  • Slider 控件用于調整縮放比例,設置了取值范圍和初始值。
  • 通過 onValueChanged 將滑塊的值賦給 imageScale,實現動態縮放控制。
運行效果

請添加圖片描述


示例2:圖像平移(ImageTransform.qml)

import QtQuick
import QtQuick.ControlsItem {width: 400height: 400Image {id: imagesource: "qrc:/images/deepseek-logo.png"width: 200height: 200anchors.centerIn: parenttransform: Translate {id: translateTransformx: 0y: 0}}// 使用鼠標拖拽實現平移MouseArea {anchors.fill: parentproperty point lastPosonPressed: lastPos = Qt.point(mouse.x, mouse.y)onPositionChanged: {translateTransform.x += mouse.x - lastPos.xtranslateTransform.y += mouse.y - lastPos.ylastPos = Qt.point(mouse.x, mouse.y)}}
}
代碼說明

圖片元素:

  • Image 用于顯示圖片,設置了圖片源、寬高,并通過錨點居中顯示在 Item 中。
  • 通過 transform 屬性添加了一個 Translate 變換(translateTransform),用于控制圖片的位移,初始時 x 和 y 方向的位移均為 0。

鼠標拖拽平移:

  • Item 中添加了一個 MouseArea,覆蓋整個 Item 的區域。
  • MouseArea 有一個 lastPos 屬性,用于存儲鼠標按下的位置。
  • onPressed 信號處理程序中,將鼠標按下的位置賦給 lastPos
  • onPositionChanged 信號處理程序中,計算鼠標位置的變化量,然后更新 translateTransform 的 x 和 y 值,從而實現圖片的平移。
運行效果

請添加圖片描述


示例3:圖像旋轉(ImageRotation.qml)

import QtQuick
import QtQuick.ControlsItem {width: 400height: 400Image {id: imagesource: "qrc:/images/deepseek-logo.png"width: 200height: 200anchors.centerIn: parent// 旋轉控制property real imageRotation: 0rotation: imageRotation// 旋轉動畫Behavior on rotation {NumberAnimation { duration: 200 }}}// 添加旋轉控制滑塊Slider {anchors.bottom: parent.bottomwidth: parent.widthfrom: 0to: 360value: 0onValueChanged: image.imageRotation = value}
}
代碼說明

圖片元素:

  • Image 用于顯示圖片,設置了圖片源、寬高,并通過錨點居中顯示在 Item 中。
  • 定義了 imageRotation 屬性控制圖片的旋轉角度,默認值為 0。
  • 將圖片的 rotation 屬性綁定到 imageRotation,使其隨 imageRotation 變化而旋轉。
  • 使用 BehaviorNumberAnimation 實現旋轉動畫效果。

旋轉控制滑塊:

  • Item 中添加了一個 Slider,用于控制圖片的旋轉角度。
  • Slider 的取值范圍設置為 0 到 360,初始值為 0。
  • 通過 onValueChanged 將滑塊的值賦給圖片的 imageRotation 屬性,實現動態旋轉控制。
運行效果

請添加圖片描述


總結

本文實現了3個示例,分別是:

  • 示例1:圖片縮放(通過定義 imageScale 屬性控制圖片縮放比例,利用 BehaviorNumberAnimation 實現縮放動畫效果。滑塊的值變化時,動態調整圖片的縮放比例。)
  • 示例2:圖片平移(在圖片上添加 Translate 變換,通過鼠標按下的位置和移動的位置差,動態更新圖片的平移量,實現拖拽平移效果。)
  • 示例3:圖片旋轉(定義 imageRotation 屬性控制圖片旋轉角度,利用 BehaviorNumberAnimation 實現旋轉動畫效果。滑塊的值變化時,動態調整圖片的旋轉角度。)

下載鏈接

工程下載地址:GitCode -> QML Image Transform

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82380.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82380.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 系統命令使用指南1

適用于 Red Hat / CentOS / Rocky Linux 等系統的基本初始化配置操作。 🔒 1. 關閉 SELinux(臨時生效) setenforce 0?? 注意:此命令僅臨時關閉 SELinux,重啟后可能恢復。要永久關閉,請修改 /etc/selinux…

1.2.1 Linux音頻系統發展歷程簡介

Linux音頻系統的發展經歷了從最初的簡單驅動到今天多層次、模塊化音頻架構。簡要梳理其主要歷程: 早期的OSS(Open Sound System) 在90年代及2000年代初,Linux主要使用OSS來支持音頻。OSS直接為硬件設備(如聲卡&#…

【Linux操作系統】第一彈——Linux基礎篇

文章目錄 💡 一. Linux的基本常識🪔 1.1 linux網絡連接三種方式🪔1.2 虛擬機的克隆🪔1.3 虛擬機的快照🪔1.4 虛擬機的遷移和刪除🪔1.5 vmtools工具 💡二. Linux的目錄結構🪔2.1 Linu…

STM32printf重定向到串口含armcc和gcc兩種方案

STM32串口重定向:MDK與GCC環境下需重寫的函數差異 在嵌入式開發中,尤其是使用 STM32系列微控制器 的項目中,調試信息的輸出是不可或缺的一部分。為了方便調試,開發者通常會選擇將 printf 等標準輸出函數通過 UART 串口發送到 PC …

C++ 文本讀寫與二進制讀寫的底層機制

1.文件的打開方式 1.文本打開 在windows中,寫入時會將\n換成\r\n,讀出時\r\n會讀出\n linux對\n讀寫不做處理 2.二進制打開 對\n讀寫不做處理 2.文本讀寫 1.數據要先變成字符串再寫進緩沖區 2.字符串直接寫進緩沖區就是 3.c對文本讀寫的支持 istream/ostream中重載了對…

02 mysql 管理(Windows版)

一、啟動及關閉 MySQL 服務器 1.1 通過 “服務” 管理工具 winr打開運行,輸入services.msc 找到MySQL80,這個是我們在安裝mysql的時候給的服務的名稱,具體見文章mysql 安裝 右鍵選擇啟動或者停止。 1.2 通過命令提示符 1.2.1 關閉命令…

Elasticsearch知識匯總之 ElasticSearch高可用方案

六 ElasticSearch高可用方案 6.1 高可用架構 請求協調節點根據負載均衡,轉發給主分片節點,主分片同步復制給從節點,主從節點都寫入完成返回客戶端請求成功。對于讀請求,協調負載到任意節點數據節點,數據節點把各自符合…

H5 移動端適配最佳實踐落地指南。

文章目錄 前言一、為什么需要移動端適配?二、核心適配方案1. 視口(Viewport)設置2. 三種適配方案 (僅供參考)(1)rem 適配方案(2)vw/vh 適配方案(3&#xff09…

MySQL初階:數據庫約束和表的設計

數據庫約束 數據庫約束是針對數據庫中的表中的數據進行施加規則和條件,用于確保數據的準確性和可靠性。 數據庫約束類型 1)not null 非空類型 :指定非空類型的列不能存儲null,如果插入的數據是null便會報錯。 2)de…

LVGL- 按鈕矩陣控件

1 按鈕矩陣控件 lv_btnmatrix 是 LVGL(Light and Versatile Graphics Library) v8 中提供的一個非常實用的控件,用于創建帶有多個按鈕的矩陣布局。它常用于實現虛擬鍵盤、數字鍵盤、操作面板、選擇菜單等場景,特別適用于嵌入式設…

excel 批量導出圖片并指定命名

一、開發環境 打開excel文件中的宏編輯器和JS代碼調試 工具-》開發工具-》WPS宏編輯器 左邊是工程區,當打開多個excel時會有多個,要注意不要把代碼寫到其他工作簿去了 右邊是代碼區 二、編寫代碼 宏是js語言,因此變量或者方法可以網上搜…

yolov5基礎--yolov5源碼閱讀(common.py)

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 博主簡介:努力學習的22級本科生一枚 🌟?;探索AI算法,C,go語言的世界;在迷茫中尋找光芒…

5.0.5 變換(旋轉、縮放、扭曲)

WPF變換可以產生特殊效果,如平移、旋轉、扭曲。 變換類 描述TranslateTransform沿著X軸和Y軸平移ScaleTransform 沿著定義的中心點縮放RotateTransform沿著定義的中心點旋轉SkewTransform 扭曲元素MatrixTransfrom提供3x3矩陣,用于定義一個自定義變換 1…

如何設置內網映射端口到外網訪問?哪些軟件可以進行端口映射?

大多數時候我們所使用的服務器都是在內網搭建的,而且內網是可以訪問外網的,但外網是沒法直接訪問內網IP和端口服務的。也就是說外網無法直接訪問到內網的網絡地址,需要大家去搭建一個內外網互通的橋梁,把內網服務器指定端口映射到…

養生:塑造健康生活的良方

養生是一場貫穿生活的自我關愛行動,從飲食、運動、睡眠到心態調節,每一個環節都對健康有著深遠影響。以下為你帶來全面且實用的養生策略。 飲食養生:科學搭配,呵護腸胃 合理規劃三餐,遵循 “早營養、午均衡、晚清淡”…

YOLOv12云端GPU谷歌免費版訓練模型

1.效果 2.打開 https://colab.research.google.com/?utm_sourcescs-index 3.上傳代碼 4.解壓 !unzip /content/yolov12-main.zip -d /content/yolov12-main 5.進入yolov12-main目錄 %cd /content/yolov12-main/yolov12-main 6.安裝依賴庫 !pip install -r requirements.…

機器人手臂的坐標變換:一步步計算齊次矩陣過程 [特殊字符]

大家好!今天我們來學習如何計算機器人手臂的坐標變換。別擔心,我會用最簡單的方式解釋這個過程,就像搭積木一樣簡單! 一、理解問題 我們有一個機器人手臂,由多個關節組成。每個關節都有自己的坐標系,我們需要計算從世界坐標系(W)到末端執行器(P?)的完整變換。 二、已…

CSS中的@import指令

一、什么是import指令&#xff1f; import 是CSS提供的一種引入外部樣式表的方式&#xff0c;允許開發者在CSS文件中引入其他CSS文件&#xff0c;或者在HTML的<style>標簽中引入外部樣式。與常見的<link>標簽相比&#xff0c;import 提供了一種更“CSS原生”的樣式…

[學成在線]23-面試題總結

1. 詳細說說你的項目吧 從以下幾個方面進行項目介紹: 項目的背景&#xff0c;包括: 是自研還是外包、什么業務、服務的客戶群是誰、誰去運營等問題。項目的業務流程項目的功能模塊項目的技術架構個人工作職責個人負責模塊的詳細說明&#xff0c;包括模塊的設計&#xff0c;所…

C++編程語言:標準庫:標準庫概觀(Bjarne Stroustrup)

第30章 標準庫概觀(Standard-Library Overview) 目錄 30.1 引言 30.1.1 標準庫設施 30.1.2 設計約束 30.1.3 描述風格 30.2 頭文件 30.3 語言支持 30.3.1 對initializer_list的支持 30.3.2 對范圍for的支持 30.4 異常處理 30.4.1 異常 30.4.1…