qml 實現數值鍵盤

import QtQuick 2.0import QtQuick.Layouts 1.12
import"../pad"
// PasswordKeyboard.qml
import QtQuick 2.12ColumnLayout {id: keyboardspacing: 8// 鍵盤標題Text {text: "安全輸入"font.pixelSize: 16color: "#666"Layout.alignment: Qt.AlignHCenterLayout.bottomMargin: 10}// 提示Text {text: "輸入密碼時,請確保周圍環境安全"font.pixelSize: 14color: "#ff5252"Layout.alignment: Qt.AlignHCenter}// 鍵盤區域GridLayout {Layout.alignment: Qt.AlignHCentercolumns: 4columnSpacing: 10rowSpacing: 10// 數字按鍵 1-9Repeater {model: 9Keybutton {text: index + 1width: 70height: 60onClicked: if (activeInputField) activeInputField.text += text}}// 特殊按鍵Keybutton {text: "0"width: 70height: 60onClicked: if (activeInputField) activeInputField.text += text}Keybutton {text: "?"width: 70height: 60bgColor: "#ff5252"onClicked: {if (activeInputField && activeInputField.text.length > 0) {activeInputField.text = activeInputField.text.slice(0, -1);}}}Keybutton {text: "完成"width: 70height: 60bgColor: "#4CAF50"onClicked: keyboardClosed()}}// 信號signal keyboardClosed()// 屬性property var activeInputField: null
}
// KeyButton.qml
import QtQuick 2.12Rectangle {id: buttonwidth: 60height: 50radius: 8// 公共屬性property string text: ""property color bgColor: "white"property color textColor: "#333"// 信號signal clicked()color: mouseArea.pressed ? Qt.darker(bgColor, 1.1) : bgColorborder.color: "#ddd"border.width: 1Text {text: button.textfont.pixelSize: 20font.bold: truecolor: button.textColoranchors.centerIn: parent}MouseArea {id: mouseAreaanchors.fill: parentonClicked: button.clicked()}
}

我們注意到代碼中有幾個問題需要修正:

1. 特殊按鍵部分有兩個按鈕:一個是"0"按鈕,另一個是退格按鈕(但文本是".",這可能是設計錯誤,因為通常退格按鈕用圖標或"←"表示,而小數點按鈕是".")。

2. 當前代碼中,小數點按鈕實際上被用作退格(刪除最后一個字符)功能,這顯然是不正確的。根據按鈕的文本,它應該是輸入小數點,但點擊事件卻是刪除。

3. 另外,我們注意到有一個“0”按鈕,寬度為140,而其他按鈕寬度為70,這樣布局可能會出現問題,因為GridLayout默認是左到右排列,并且我們設置了列間距。我們打算將鍵盤布局為3列,但是目前數字1-9有9個按鈕(3x3),然后下面一行應該是一個寬按鈕(0)占兩列,然后一個小按鈕(退格)占一列。但是代碼中并沒有明確設置列數(columns屬性被注釋了),而是通過flow和每個按鈕的寬度來布局。 根據代碼,我們想要3列布局,那么: 第一行:1,2,3 第二行:4,5,6 第三行:7,8,9 第四行:0(占兩列寬度)和 一個退格按鈕(占一列) 但是目前代碼中,Repeater生成了9個按鈕(1-9),然后接著是兩個按鈕:0和退格(當前顯示為小數點,但功能是退格)。 問題在于,GridLayout在沒有設置列數的情況下,會根據子項的寬度自動換行。我們期望第四行只有兩個按鈕:一個占兩列(寬度140,等于兩個70加上一個列間距10)的0按鈕,和一個占一列(70)的退格按鈕。但是,由于GridLayout的列間距為10,所以總寬度應該是:兩列寬度(70*2)加上兩個列間距(10*2)等于160,而0按鈕寬度140小于160,所以實際上0按鈕只會占據一列多,而不會自動跨兩列。 因此,我們需要為0按鈕設置Layout.columnSpan屬性,讓它橫跨兩列。同時,我們需要設置GridLayout的columns屬性為3,這樣布局才能按照3列來排列。

修改建議: 1. 取消注釋columns: 3,設置為3列。

2. 為0按鈕設置Layout.columnSpan: 2,使其橫跨兩列。 3. 將小數點按鈕的文本改為表示退格的符號(比如"←"),并調整其功能為刪除最后一個字符。同時,添加一個小數點按鈕,但是這里我們注意到,原代碼中并沒有小數點按鈕,所以我們需要添加。 4. 但是原設計似乎只有10個鍵(1-9,0,退格),而小數點按鈕缺失。根據常見數字鍵盤,通常有0、小數點、退格。因此,我們可能需要調整第四行為三個按鈕:0、小數點、退格。但這樣第四行就有三個按鈕,而0按鈕就不需要跨兩列了。或者另一種常見布局是第四行有0(占一列)、小數點(占一列)、退格(占一列)。但是這樣第四行就是三個按鈕,與前三行對齊。 考慮到原設計是0按鈕占140(兩個70的寬度),而退格按鈕占70,并且列間距10,那么0按鈕的寬度140實際上等于兩個按鈕的寬度(70*2)加上一個列間距(10)。因此,如果我們設置3列,那么0按鈕橫跨兩列,退格按鈕占一列,這樣第四行就只需要兩個按鈕(0和退格),而小數點沒有位置了。 所以,我們需要重新設計第四行,有兩種方案: 方案一:第四行三個按鈕:0、.、退格,每個按鈕寬度70。這樣0按鈕就不需要跨列了。 方案二:保持0按鈕跨兩列,然后退格按鈕占一列,但這樣就沒有小數點按鈕的位置了。 根據需求,我們需要小數點按鈕。因此,我們采用方案一:第四行三個按鈕:0、小數點、退格。 調整如下: 1. 將Repeater的9個按鈕(1-9)生成后,再添加三個按鈕:0、小數點、退格。 2. 設置GridLayout的columns為3,這樣每行三個按鈕。 3. 調整0按鈕的寬度為70(與其他按鈕一致),不再跨列。 但是,原代碼中0按鈕后面只有一個按鈕(退格,但文本是小數點)。現在我們需要添加小數點按鈕。 因此,我們將特殊按鍵部分拆分成三個按鈕:0、小數點、退格。 同時,修正退格按鈕的文本和功能: - 小數點按鈕:文本為".",點擊事件是追加小數點。 - 退格按鈕:文本可以是"←"或"退格",點擊事件是刪除最后一個字符。

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

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

相關文章

PID控制算法

文章目錄引言一、基本原理1.1.簡介1.2.開環與閉環1.3.PID 的公式1.3.1.比例項(Proportional)1.3.2.積分項(Integral)1.3.3.微分項(Differential)1.4.連續形式與離散形式的 PID 公式1.4.1.連續形式1.4.2.離散…

MyBatis 動態數據源切換在 Spring Boot 環境下的實現方案

第一章 需求背景與技術選型1.1 多數據源場景概述在大型企業級應用中,單一數據庫往往無法滿足高并發和多業務線的需求,因此需要引入 多數據源 的架構設計。常見的多數據源場景包括:讀寫分離、多租戶、分庫分表以及數據源負載均衡等。讀寫分離&…

PCA降維理論詳解

文章目錄一、什么是PCA?二、為什么需要降維?三、PCA的數學原理與詳細推導視角一:最大化投影方差(Maximizing Variance)視角二:最小化重構誤差(Minimizing Reconstruction Error)四、…

Android RxJava變換操作符詳解

RxJava作為響應式編程在Android開發中的利器,其強大的變換操作符能夠幫助我們優雅地處理數據流。本文將深入講解RxJava中最常用的變換操作符及其實際應用場景。一、RxJava變換操作符概述變換操作符(Transformation Operators)用于對Observable發射的數據序列進行變換…

開源數據發現平臺:Amundsen 快速上手指南

Amundsen 是一個數據發現和元數據引擎,旨在提高數據分析師、數據科學家和工程師與數據交互時的生產力。目前,它通過索引數據資源(表格、儀表板、數據流等)并基于使用模式(例如,查詢頻率高的表格會優先于查詢…

【密碼學實戰】國密SM2算法介紹及加解密/簽名代碼實現示例

引言 在信息安全領域,密碼算法是數據保護的核心基石。2010 年,中國國家密碼管理局發布了 SM2 橢圓曲線公鑰密碼算法,作為國產密碼標準的核心成員,它憑借高效安全的特性,逐步替代 RSA 等國際算法,廣泛應用于…

QT開發中如何加載第三方dll文件

文章目錄🔧 一、隱式加載(靜態鏈接)操作步驟:?? 二、顯式加載(動態鏈接,推薦使用QLibrary)操作步驟:💻 三、直接調用Windows API(僅Windows)??…

后端學習資料 持續更新中

數據庫: 該網址包含:圖解MySql, 看明白誰也問不倒你~ 圖解計算機網絡、操作系統、計算機組成、MySQL、Redis,讓天下沒有難懂的八股文!https://xiaolincoding.com/

《嵌入式Linux應用編程(六):并發編程基礎:多進程exec函數族及多線程基礎》

一、exec函數族在一個進程里面執行另一個文件本質&#xff1a;將文本區的指令代碼替換成exec要執行的指令#include <unistd.h>參數&#xff1a;path:要執行的可執行文件的路徑和名稱arg:執行該可執行文件時需要傳遞的參數NULL&#xff1a;參數傳遞結束標志 返回值&#x…

【121頁PPT】智慧方案智慧綜合體智能化設計方案(附下載方式)

篇幅所限&#xff0c;本文只提供部分資料內容&#xff0c;完整資料請看下面鏈接 https://download.csdn.net/download/2501_92808859/91654007 資料解讀&#xff1a;【121頁PPT】智慧方案智慧綜合體智能化設計方案 詳細資料請看本解讀文章的最后內容 一、項目概述與智能化總…

Linux網絡基礎(一)

目錄 計算機網絡背景 網絡發展 初識 "協議" 網絡協議初識 協議分層 軟件分層的好處 打電話例子 OSI七層模型 TCP/IP五層(或四層)模型 參考資料 再識協議 為什么要有 TCP/IP 協議&#xff1f; 什么是 TCP/IP 協議&#xff1f; TCP/IP 協議與操作系統的關系(宏觀上&…

MySQL多表查詢案例

多表查詢本文介紹了多表查詢中的表關系概念和操作方法。主要內容包括&#xff1a;1.三種表關系類型&#xff08;一對多、多對多、一對一&#xff09;及其實現方式&#xff1b;2.多表查詢的四種連接方式&#xff08;內連接、左外連接、右外連接、自連接&#xff09;及語法&#…

Dify 從入門到精通(第 36/100 篇):Dify 的插件生態擴展

Dify 從入門到精通&#xff08;第 36/100 篇&#xff09;&#xff1a;Dify 的插件生態擴展 Dify 入門到精通系列文章目錄 第一篇《Dify 究竟是什么&#xff1f;真能開啟低代碼 AI 應用開發的未來&#xff1f;》介紹了 Dify 的定位與優勢第二篇《Dify 的核心組件&#xff1a;從…

【已解決】在Spring Boot工程中,若未識別到resources/db文件夾下的SQL文件

在Spring Boot工程中&#xff0c;若未識別到resources/db文件夾下的SQL文件&#xff0c;通常與資源路徑配置、構建工具設置或代碼加載方式有關。以下是逐步排查和解決方案&#xff1a;??1. 確認SQL文件存放路徑??Spring Boot默認從類路徑&#xff08;classpath:&#xff09…

【Java】網絡編程(4)

1. 再談 UDP 報文長度&#xff1a;也是 2 個字節&#xff0c; 0 - 65535&#xff0c;也就是 64 kb。這表示一個 UDP 數據包一次最多只能傳輸 64 kb 的數據校驗和&#xff1a;驗證數據是否在傳輸過程中發生修改。數據在傳輸過程中可能受到信號干擾&#xff0c;發生 “比特翻轉”…

QT(事件)

一、事件前言事件是QT的三大機制之一&#xff0c;一定程度上信號和槽也屬于事件的一種 QT中的事件指哪些&#xff1a;窗口關閉&#xff0c;窗口顯示&#xff0c;敲擊鍵盤&#xff0c;點擊鼠標左鍵、鼠標右鍵、鼠標滾輪&#xff0c;文件拖放等等1、事件循環QT中的所有事件&#…

基于 Vue2+Quill 的富文本編輯器全方案:功能實現與樣式優化

在 Web 開發中&#xff0c;富文本編輯器是內容管理系統、博客平臺等應用的核心組件。本文將詳細介紹如何基于 Vue 和 Quill 構建一個功能完善、樣式精美的富文本編輯器&#xff0c;重點解決字體字號選項冗長、樣式不美觀及功能完整性問題&#xff0c;提供可直接部署使用的完整方…

C#內嵌字符串格式化輸出

內嵌字符串格式輸出 double speedOfLight 299792.458;System.Globalization.CultureInfo.CurrentCulture System.Globalization.CultureInfo.GetCultureInfo("nl-NL"); string messageInCurrentCulture $"The speed of light is {speedOfLight:N3} km/s.&quo…

ThreeJS程序化生成城市大場景底座(性能測試)

一、簡介基于矢量geojson數據構建建筑、植被、道路等&#xff0c;實現城市場景底座。涉及渲染的性能優化無非就是眾所周知的那些事兒。視錐剔除、mesh合并、減少draw call、四叉樹、八叉樹、數據壓縮、WebWorker、著色器優化等。下面是對東莞市數十萬建筑以及海量3D樹的渲染測試…

?電風扇離線語音芯片方案設計與應用場景:基于 8 腳 MCU 與 WTK6900P 的創新融合

?電風扇離線語音芯片方案設計與應用場景&#xff1a;基于 8 腳 MCU 與 WTK6900P 的創新融合一、引言在智能家居領域蓬勃發展的當下&#xff0c;用戶對于家電產品的智能化和便捷性需求日益增長。傳統的電風扇控制方式&#xff0c;如按鍵操作或遙控器控制&#xff0c;在某些場景…