qml實現 裁剪進度條

?我們需要實現一個垂直進度條效果,但使用圖片裁剪的方式。具體需求: 1. 圖片位置固定,容器對齊其左邊和下邊,寬度和圖片相同。 2. 容器背景透明,調整裁剪容器的高度,使其有高度進度條的感覺(從下往上增長)。 實現思路: - 固定圖片的位置(例如,在某個Item內定位)。 - 創建一個裁剪容器,寬度與圖片相同,高度由進度值控制(從0到圖片高度)。 - 裁剪容器內放置圖片,并將圖片的底部與裁剪容器的底部對齊(因為進度是從下往上增長,所以圖片需要向上移動)。 - 裁剪容器設置`clip: true`,這樣圖片超出裁剪容器的部分將被隱藏。 具體步驟: 1. 用一個Item作為圖片的容器(固定位置)。 2. 在容器內,再創建一個Item作為裁剪容器(寬度與圖片相同,高度由進度值控制)。 3. 裁剪容器內放置圖片,并設置圖片的y坐標為:-(圖片高度 - 裁剪容器高度),這樣圖片的底部就會與裁剪容器的底部對齊。 注意:圖片的錨定或位置設置要確保底部對齊。 假設我們有一張高度為200px的圖片,進度為50%時,裁剪容器高度為100px,此時圖片的y坐標應為-100px(即向上移動100px),這樣圖片的底部就對齊了裁剪容器的底部,而裁剪容器只顯示圖片的下半部分(從下往上顯示了一半)。 我們將通過一個進度值(0.0到1.0)來控制裁剪容器的高度(0到圖片高度)。

import QtQuick 2.7
import QtQuick.Controls 1.4import QtQuick.Controls.Styles 1.4
ApplicationWindow {id: mainWindowwidth: 800height: 600visible: truetitle: "圖片裁剪進度條 - 修正版"color: "#121212"// 圖片源 - 使用漸變圖片模擬進度條property string imageSource: "qrc:/image/a.png"// 進度值 (0.0 - 1.0)property real progress: 0.5// 圖片屬性property int imageWidth: 50property int imageHeight: 200// 主布局Item {anchors.fill: parent// 狀態信息 - 顯示在頂部Text {anchors.top: parent.topanchors.horizontalCenter: parent.horizontalCenteranchors.topMargin: 20text: "圖片裁剪進度條 - 固定在左下角"font.bold: truefont.pixelSize: 18color: "#4CAF50"}// ==============================================// 圖片容器 - 固定在左下角 (核心修正部分)// ==============================================Item {id: imageContainerwidth: imageWidth  // 寬度與圖片相同height: imageHeight // 高度與圖片相同anchors.left: parent.left // 對齊父元素左邊anchors.bottom: parent.bottom // 對齊父元素底邊anchors.margins: 20 // 邊距// 背景網格 - 幫助可視化Rectangle {anchors.fill: parentcolor: "transparent"border.color: "#333"border.width: 1// 網格線Canvas {anchors.fill: parentonPaint: {var ctx = getContext("2d")ctx.clearRect(0, 0, width, height)ctx.strokeStyle = "#333"ctx.lineWidth = 1// 繪制水平線for (var y = 0; y <= height; y += 10) {ctx.beginPath()ctx.moveTo(0, y)ctx.lineTo(width, y)ctx.stroke()}// 繪制垂直線for (var x = 0; x <= width; x += 10) {ctx.beginPath()ctx.moveTo(x, 0)ctx.lineTo(x, height)ctx.stroke()}}}}// ==============================================// 核心修正:裁剪容器實現進度條效果// ==============================================Item {id: cropContainerwidth: parent.width // 寬度與圖片相同height: imageHeight * progress // 高度由進度值控制anchors.left: parent.left // 對齊左邊anchors.bottom: parent.bottom // 對齊底邊clip: true // 關鍵:啟用裁剪// 圖片元素Image {id: progressImagesource: imageSourcesourceSize.width: imageWidth // 原始寬度sourceSize.height: imageHeight // 原始高度asynchronous: true // 異步加載// 關鍵修正:圖片底部對齊容器底部anchors.bottom: parent.bottom}}// 當前進度文本Text {anchors.top: parent.top // 錨定到容器頂部anchors.topMargin: -30 // 在圖片上方顯示anchors.horizontalCenter: parent.horizontalCenter // 水平居中text: Math.round(progress * 100) + "%" // 顯示百分比font.pixelSize: 20 // 字體大小font.bold: true // 粗體color: "white" // 文本顏色style: Text.Outline // 文本輪廓styleColor: "#000" // 輪廓顏色}// 邊框裝飾Rectangle {anchors.fill: parent // 與圖片容器相同大小color: "transparent" // 透明背景border.color: "#4CAF50" // 邊框顏色border.width: 2 // 邊框寬度radius: 4 // 圓角半徑}}// ==============================================// 控制面板 - 在右側顯示// ==============================================Column {id: controlPanelwidth: 300anchors.left: imageContainer.right // 在圖片容器右側anchors.bottom: parent.bottom // 對齊底部anchors.margins: 30 // 邊距spacing: 20 // 子元素間距// 標題Text {text: "進度控制" // 標題文本font.bold: true // 粗體font.pixelSize: 24 // 字體大小color: "#4CAF50" // 標題顏色}// 進度滑塊Column {width: parent.widthspacing: 5// 滑塊標簽Text {text: "進度值: " + Math.round(progress * 100) + "%" // 顯示當前進度font.pixelSize: 18 // 字體大小color: "white" // 文本顏色}// 進度滑塊Slider {id: progressSliderwidth: parent.width // 寬度填滿minimumValue: 0.0 // 最小值maximumValue: 1.0 // 最大值value: progress // 當前值onValueChanged: progress = value // 值改變時更新進度// 自定義滑塊樣式style: SliderStyle {groove: Rectangle {implicitHeight: 8 // 滑槽高度radius: 4 // 圓角color: "#333" // 背景色// 進度填充Rectangle {height: parent.heightwidth: control.value * parent.width // 根據進度填充radius: 4 // 圓角gradient: Gradient {GradientStop { position: 0.0; color: "#4CAF50" } // 綠色GradientStop { position: 0.5; color: "#2196F3" } // 藍色GradientStop { position: 1.0; color: "#FF9800" } // 橙色}}}// 滑塊手柄handle: Rectangle {width: 24 // 寬度height: 24 // 高度radius: 12 // 圓形color: control.pressed ? "white" : "#f0f0f0" // 按下時白色,否則淺灰色border.color: "#4CAF50" // 邊框顏色border.width: 2 // 邊框寬度// 中心點Rectangle {anchors.centerIn: parentwidth: 8height: 8radius: 4color: "#4CAF50"}}}}}// 預設按鈕Grid {columns: 3 // 3列布局spacing: 10 // 按鈕間距width: parent.width// 預設按鈕文本property var presets: [{text: "0%", value: 0.0},{text: "25%", value: 0.25},{text: "50%", value: 0.5},{text: "75%", value: 0.75},{text: "100%", value: 1.0},{text: "隨機", value: -1}]// 生成預設按鈕Repeater {model: controlPanel.presetsButton {width: (controlPanel.width - 20) / 3 // 平均寬度text: modelData.text // 按鈕文本// 點擊事件onClicked: {if (modelData.value === -1) {// 隨機值progress = Math.random().toFixed(2)} else {// 預設值progress = modelData.value}}// 按鈕樣式style: ButtonStyle {background: Rectangle {radius: 5 // 圓角color: control.pressed ? "#4CAF50" : "#333" // 按下時綠色,否則深灰border.color: "#4CAF50" // 邊框顏色border.width: 1 // 邊框寬度}label: Text {text: control.text // 按鈕文本color: "white" // 文本顏色horizontalAlignment: Text.AlignHCenter // 水平居中verticalAlignment: Text.AlignVCenter // 垂直居中}}}}}// 動畫控制Row {spacing: 15// 開始動畫按鈕Button {text: "開始動畫"onClicked: progressAnimation.start()style: ButtonStyle {background: Rectangle {radius: 5color: control.pressed ? "#4CAF50" : "#333"border.color: "#4CAF50"border.width: 1}label: Text {text: control.textcolor: "white"}}}// 暫停動畫按鈕Button {text: "暫停動畫"onClicked: progressAnimation.pause()style: ButtonStyle {background: Rectangle {radius: 5color: control.pressed ? "#FF9800" : "#333"border.color: "#FF9800"border.width: 1}label: Text {text: control.textcolor: "white"}}}// 停止動畫按鈕Button {text: "停止動畫"onClicked: progressAnimation.stop()style: ButtonStyle {background: Rectangle {radius: 5color: control.pressed ? "#F44336" : "#333"border.color: "#F44336"border.width: 1}label: Text {text: control.textcolor: "white"}}}}}}// ==============================================// 動畫效果 - 自動改變進度值// ==============================================NumberAnimation {id: progressAnimationtarget: mainWindowproperty: "progress"from: 0.0to: 1.0duration: 3000 // 3秒完成easing.type: Easing.InOutQuad // 平滑的緩動效果loops: Animation.Infinite // 無限循環running: false // 默認不運行}
}

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

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

相關文章

Dify 工作流全棧解析:從零構建你的 AI 應用流程引擎

AI工作流的導言&#xff1a; 工作流系統&#xff08;Workflow System&#xff09;是 Dify 的核心組成部分&#xff0c;它通過可視化編程界面支持創建復雜的 AI 應用程序。用戶可以將不同的功能塊連接起來&#xff0c;從而設計出用于處理數據、與 AI 模型交互、管理條件以及執行…

上下位機通訊規則

0&#xff1a;事由 最近開發&#xff0c;上位機Qt與下位機通訊的時候發現通訊規則有些不一樣&#xff0c;這里簡單記錄一下 。所有代碼基于元寶生成&#xff0c;屬于偽代碼不保證真實可用&#xff0c;啊但是邏輯是這么個邏輯。 1&#xff1a;底層通訊規則 以STM32向上位機通訊…

創建平衡二叉樹C++

給你一個整數數組 nums &#xff0c;其中元素已經按 升序 排列&#xff0c;請你將其轉換為一棵 平衡 二叉搜索樹。 平衡二叉樹&#xff1a;每個節點的左右子樹高度差不超過1 class Solution { public:TreeNode* dfs(vector<int>& nums, int left, int right){if(l…

海光の初體驗

背景 八張K100的風扇已經將近一年沒轉過了…早在今年4月29日&#xff0c;Qwen3正式發布并全部開源8款「混合推理模型」。作為Qwen系列中的最新一代大型語言模型&#xff0c;Qwen3在推理、指令遵循、工具調用、多語言能力等方面進行了全面增強。海光DCU&#xff08;Deep Comput…

場外交易(OTC)財富管理系統開發及解決方案報告

——跨境金融科技賦能機構客戶新增長 一、OTC市場現狀與機構業務痛點 1. 政策機遇與市場擴容 “北向互換通”期限延長&#xff1a;2025年7月1日&#xff0c;中國外匯交易中心聯合香港交易所將利率互換合約期限延長至30年&#xff0c;首日交易規模達15.3億元&#xff0c;填補超…

pytorch底層原理學習--JIT與torchscript

文章目錄 0 目的1 TorchScript1.1 語言特性的限定性1.2 設計目的&#xff1a;模型表達的專注性 2pytorch JIT&#xff08;Just-in-time compilation)2.1pytorch JIT定義2.1pytorch JIT整個過程&#xff1a;1. 前端轉換層&#xff1a;生成靜態計算圖2. 中間表示層&#xff08;IR…

Ubuntu+Nginx+php+SQLite3+typecho手動搭建個人博客

零.Ubuntu環境 一.安裝nginx 使用以下指令進行nginx web服務器安裝&#xff1a; apt-get install nginx 如果提示找不到安裝包&#xff0c;也可以更新一下系統的apt環境包&#xff1a; sudo apt update 安裝完成后&#xff0c;可以使用以下指令查看nginx是否處于激活狀態&#…

網絡協議概念與應用層

1.概念 1.1 例子 點外賣 上述這個過程,就是自定義協議 自定義協議,具體的方式也是非常靈活的 2.幾種開發中更常見的格式 2.1xml 上古時期的組織數據的格式 通過標簽來組織數據 xml的優勢:讓數據的可讀性變得更好了 劣勢:標簽寫起來繁瑣,傳輸的時候也占用更多網絡帶寬 2.2…

pytorch學習—7.處理多維特征的輸入

2. 線性模型 3.梯度下降算法 4.反向傳播(用pytorch算梯度) 5.用pytorch實現線性回歸 6.logistic回歸 7.處理多維特征的輸入_嗶哩嗶哩_bilibili 7.1代碼復現: import numpy as np import torch import matplotlib.pyplot as plt# 1. 獲取數據集 xy_data = np.lo

AI助手“智普清言”《三元》(Python)詩解

文本邏輯解清晰&#xff0c;詩意對應技法輕。 筆記模板由python腳本于2025-07-01 06:54:55創建&#xff0c;本篇筆記適合喜歡python三元語句的coder翻閱。 學習的細節是歡悅的歷程 博客的核心價值&#xff1a;在于輸出思考與經驗&#xff0c;而不僅僅是知識的簡單復述。 Pytho…

本地RAG實戰:用Spring AI+Ollama+DeepSeek+ChromaDB增強文檔問答

本文手把手教你在本地部署RAG系統&#xff1a; 用 Spring AI 整合 Ollama&#xff08;運行DeepSeek中文模型&#xff09;ChromaDB 存儲本地文檔&#xff08;PDF/TXT&#xff09;向量Java程序實現&#xff1a;文檔解析 → 語義檢索 → 增強生成 最終效果&#xff1a;模型回答更準…

Python 數據分析:DataFrame,生成,用字典創建 DataFrame ,鍵值對數量不一樣怎么辦?

目錄 1 示例代碼2 歡迎糾錯3 論文寫作/Python 學習智能體------以下關于 Markdown 編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右S…

Java 并發編程的 CAS(Compare and Swap)是什么?

CAS&#xff08;Compare and Swap&#xff0c;比較并交換&#xff09; 并非 Java 語言特有的概念&#xff0c;而是現代計算機硬件提供的一條核心原子指令。在 Java 并發編程中&#xff0c;它扮演著“幕后英雄”的角色&#xff0c;是構建高性能、無鎖并發工具&#xff08;如原子…

【UnityAssetBundle】AssetBundle打包

AssetBundle生成AB包資源文件方式&#xff1a; Unity編輯器開發&#xff0c;自定義打包工具&#xff1b;官方提供好的打包工具&#xff0c;Asset Bundle Browser 打包 選擇一個資源&#xff0c;new一個壓縮包名稱或選擇一個壓縮包名稱 點擊Window->AssetBundle Browser&…

Hush Puppies大中華區鞋類業務移交品牌方繼續經營

據悉&#xff0c;隨著百麗集團運營的暇步士&#xff08;Hush Puppies&#xff09;大中華區鞋類授權的到期&#xff0c;暇步士&#xff08;Hush Puppies&#xff09;鞋類業務已開始運營權移交。其中線上渠道授權于2025年6月30日正式到期&#xff0c;線下渠道將于2025年12月31日前…

解釋LLM怎么預測下一個詞語的

解釋LLM怎么預測下一個詞語的 通過上文詞的向量進行映射 在Transformer架構的大語言模型(如GPT系列、BERT等)中,詞語會先被轉化為詞向量。在預測下一個詞時,模型會基于之前所有詞的向量表示(并非僅僅上一個詞,但上一個詞的向量是重要信息來源之一)進行計算。 以GPT-2…

DAY 49 CBAM注意力

目錄 DAY 49 CBAM注意力1.通道注意力模塊復習2.空間注意力模塊3.CBAM的定義作業&#xff1a;嘗試對今天的模型檢查參數數目&#xff0c;并用tensorboard查看訓練過程 DAY 49 CBAM注意力 1.通道注意力模塊復習 2.空間注意力模塊 3.CBAM的定義 import torch import torch.nn …

【網絡】Linux 內核優化實戰 - net.ipv4.conf.all.rp_filter

目錄 net.ipv4.conf.all.rp_filter 參數詳解一、參數基本概念二、參數取值及含義三、反向路徑過濾的工作原理四、配置示例與注意事項五、與其他參數的關聯六、總結 net.ipv4.conf.all.rp_filter 參數詳解 一、參數基本概念 net.ipv4.conf.all.rp_filter 是 Linux 內核中用于控…

ElementUI el-select多選下拉框,回顯數據后無法重新選擇和修改

問題 ElementUI el-select多選下拉框&#xff0c;回顯數據后無法重新選擇和修改&#xff0c;點擊選擇和刪除都沒有反應&#xff0c;頁面也沒有報錯 方案一 網上搜出來的基本上都是這個解決辦法&#xff0c;但是我設置后沒有生效&#xff0c;還是無法選擇和修改 原因 下拉框數…

計算機視覺的新浪潮:擴散模型(Diffusion Models)技術剖析與應用前景

近年來&#xff0c;擴散模型&#xff08;Diffusion Models, DMs&#xff09;迅速崛起&#xff0c;成為計算機視覺領域最令人矚目的生成模型之一。從生成高質量圖像到風格遷移、圖像修復&#xff0c;再到文本驅動圖像生成&#xff08;如 DALLE 2、Stable Diffusion、Midjourney&…