APICloud AVM框架 封装虚拟数字键盘组件

利用vant UI 数字键盘做金额输入键盘 先上效果 vant UI 数字键盘是比较通用的,往往需要根据实际业务需要进行相应整改,比如金额输入: 1、小数点不能再最前面; 2、保留小数点后两位; 3、不允许出现多于1位的小数点; 4、不允许前面出现两个0 下面开整: <template> <div> <van-field readonly label="¥" clickable :value="value1" @touchstart.native.stop="show = t 阅读详情

AVM(Application-View-Model)前端组件化开发模式基于标准Web Components组件化思想,提供包含虚拟DOM和Runtime的编程框架avm.js以及多端统一编译工具,完全兼容Web Components标准,同时兼容Vue和React语法糖编写代码,编译工具将Vue和React相关语法糖编译转换为avm.js代码。

基于标准 Web Components 组件化思想,兼容 Vue / React 语法特性,通过一次编码,分别编译为 App、小程序代码,实现多端开发。
 

组件功能介绍

虚拟数字键盘,支持数字随机,支持自定义输出数字内容的长度,自定义是否支持双向绑定,支持二次输入操作。可以为密码、验证码输入时使用。

示例展示

组件开发

组件文件

number-keyboard.stml

<template>
	<view class="number-keyboard_container">
		<view class="number-keyboard_box">
			<view class="number-keyboard_box-item-container">
				<view class="number-keyboard_box-item" v-for="item in numbers">
					<view class="number-keyboard_box-item-label" data-key={item} @click="getNumber">
						<text style="font-size:28px;">{item}</text>
					</view>					
				</view>
				<view class="number-keyboard_box-item">				
					<view class="number-keyboard_box-item-label" @click="closeBoard">
						<image class="number-keyboard_box-item-ico" src={closeBase64} mode="widthFix"></image>
					</view>	
				</view>
				<view class="number-keyboard_box-item">
					<view class="number-keyboard_box-item-label" data-key='0' @click="getNumber">
						<text style="font-size:28px;">0</text>
					</view>					
				</view>	
				<view class="number-keyboard_box-item">			
					<view class="number-keyboard_box-item-label" @click="delNumber">
						<image class="number-keyboard_box-item-ico" src={backBase64} mode="widthFix"></image>
					</view>		
				</view>					
			</view>	
		</view>
	</view>
</template>
<script>
	export default {
		name: 'number-keyboard',
		props:{
			limitLengh:Number,
			recnetNumber:Array,
			isRandom:Boolean,
			isModel:Boolean
		},
		installed(){
			if(this.props.isRandom){
				this.data.numbers.sort(this.randomsort);
			}
			if(this.props.isModel){
				this.data.resultNumber=this.props.recnetNumber;
				this.data.numberIndex = this.props.recnetNumber.length;
			}			
		},
		data() {
			return{
				numbers:['1','2','3','4','5','6','7','8','9'],
				resultNumber:[],
				numberIndex:0,
				closeBase64:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAtCAYAAAA5reyyAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAC4jAAAuIwF4pT92AAADLElEQVRo3u2Zz0tVQRTHP/lMreiXEEREPKIg29gmSJIQWgYVoQhtSqJalv0D0SKQdq0KClpXUNaupE0JZoZWZhL9cNNvkS5mlpbaYs7tnZ7vao83b+67Mh+43PO+9zh35jhnftwBj8fj8Xg8Hg+wHfgAzJTo1QWsjztIc9FfAkGa7+q22eBFlgM4AVQAAXBDKlxm+R35Mi3tPACsAqaA8pjrFMkoJmh9cVckB31St1GbhdruHdNyr3ARkTwJ6zRdUClZuOjKm4GDYt8CnojdBGzF9Ijz0rB1wFF53o8ZBgDqgd1iXwbeY/75J4AVwAvgujzfBuwT+x7Q6aCN1ggwaTKgtCYyA/gppfcovUq0BqU9Vr5tSm8QrUppPcq3VekXlD4gWmCzwS4G+F8R9o8cvjq9JpU9EeGTq6yvyv5S7Ma5SOFHwHFgMXBX6aeBWsy6MQzQIHAMqMSkZcg1YFj8BkWbAJoxaf/UQTucEDA7hV1zmEwKn1F6YlPYNR9dvsxFCm8AGjFj1wxmUVsG3ASGxKcZ2Ai8Ba6KtgnYL3Y78Fr5poEx4AowjlmitGCGiTqXAbRNwOwUbiT3luqI8hkWbURpLcq3RekjSk+LVh3xjrPq7xKbwt//Q/8s908Rz7WtfX7LfUou5+1zkcIPgJ1i6xTuVz7NwFoygQToAHaJ/TzLdw0mqKH/N2AHZm0YBrKCTNonhoD4Z+EoEpvCCxqXs3AKuAM8E30PUEPusSsfyoBXwG35XQ0cwszI94GHDtpojYC5Z2G9F+6mOB9Ja5V+UemJTeFxZY8pe9jiO3RZer8dFLtxLlK4E/M5qpx/e+ZJ4Bzws8DyqzD76ZAhzIy8FHjpoH1WCfCzcEGk5D5ZUCnFIaxTqqBSsrCdwkvkngYuUVqHSmn5XYrHDX/pIP5jy/mu3riDNBfVmLVX3EGKut5gzmGsYftcOKQOWEn+i+Qp4B3RJ2erMWe7+ZLC7J27yHyAsEKxAlgINZiPBDNZ+nLMGUehy54FTSVmSxaVgvVxVzAp9DI7eHvjrlSSWIY52wiD1xp3hZLIFkzw2uOuSJKpw/RGj8fj8XgWHn8A4dKLb2WSDzAAAAAASUVORK5CYII=',
				backBase64:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAtCAYAAAA5reyyAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAC4jAAAuIwF4pT92AAAC/UlEQVRo3u2aO2gUURSGv1k1PlFXUHwUQZEYlUACPiM2KbQSKxEkBEtbHyDxAWqjoK2gqIjYWJpC0gQLQUWjoBJUtBOMiWJMwJiYiGtxdtlzx1lndr07w4X7wcBm59xzcv655752wOPxeDwej8dJggxjtwGHgHagsQ7+fwHvgJvA1QzzrAv7gUKK12NgQdZJ22J3yuKVruf1SCbtEu4Cbqm/nyEl9hKYBGZYivMbyCMP66j6/gxwNuWcrXEMs0fcSynuKRXzY9Yi1EoHpnivUoydRyaUAvApayFqYQtSUiXxPgPLUoyfA0aKsYeyFqNaOjHFewisSNCuHRm7ZiaM0wQcB1ZH3JsNfMXBHniAv5cSSQgo95gBYH6M/XJggso9bI7y54yAzZjijZB8xg+AMZKNlw3Aa2U7HGHjnIAbgO8qqTFgY5U+9mI+gNsRNguBF5jirYuwc0rAFsozXqkEV9boaxvmg3iAjGcArcCguvcIWFLBj1MCvlVJvQHm/qe/9cC48nkf2E55zCsAH2J8OCPgVsyyW2PJbwuVt2fjwNqY9s4IeBpzuWKTDmSM0+L1A6sStK2rgDmLvvLq86Dl/7MfGVs1ozi8NYuik3Lv+GbR7yxErKgSfkL8AYQzJbwolNxFCz4D4KnyOQQcDsXpjfHhjIAAR7AnYiNSuiVf75FZGWSXM63u3fiHH6cEBBFNi3i3Bh9NmLuRAWBeyKYNmMKcuKLK2TkBAS5hininyvYDqu0UsuuIohX4qWz7ImycFBDkwFSL2F1F21KbaWBzjG34rDGMswICXA4ldyVhuz2I4M0J7XcBJ4GdEfecFhDgPKaIPSnHD4AvOHqgWiI8Jl5LMXYD8oOV0wKCrNe0iCdSitulYjpZwppwOfcCO5BeEiDLEBtXDlgMHMRc6ly3nVAWr3acQw4eNMPFRG3tzQuIgPpthB/I4cNoBjlb5wLpvpUwAWyqRyK23gSolj7kxGYpUgUB0gNtXpPFGD3APuS3E4/H4/F4PB6Pxwp/AGH7f53PGS6/AAAAAElFTkSuQmCC'
			}
		},
		methods: {
			randomsort(a,b){
				return Math.random()>0.5 ? -1 : 1;//用Math.random()函数生成0~1之间的随机数与0.5比较,返回-1或1
			},
			closeBoard(e){
				this.fire('close','');
			},
			getNumber(e){
				if(this.props.isModel){
					if(this.data.numberIndex<this.props.limitLengh){
						this.data.resultNumber[this.data.numberIndex] = e.currentTarget.dataset.key;//兼容IOS和安卓
						this.data.numberIndex += 1;
						this.fire('setNumber',this.data.resultNumber);
					}
				}
				else{
					this.fire('setNumber',[e.currentTarget.dataset.key]);
				}
				
			},
			delNumber(e){
				if(this.props.isModel){
					this.data.numberIndex -= 1;	
					if(this.data.numberIndex>=0){
						this.data.resultNumber.splice(this.data.numberIndex,1);
						this.fire('setNumber',this.data.resultNumber);
					}
				}
				else{
					this.fire('delNumber','');
				}							
			}
		}
	}
</script>
<style>
	.number-keyboard_container {
		position: absolute;
		height: 100%;
		width: 100%;
		background-color: rgba(0,0,0,0);
	}
	.number-keyboard_box{
		align-items: center;
		position: absolute;
		bottom: 0;
		width: 100%;
		background-color: #cccccc;
	}
	.number-keyboard_box-item-container{
		flex-flow:  row wrap;
		justify-content: space-around;
		align-items: center;
		padding: 10px;
	}
	.number-keyboard_box-item{
		flex-basis: 33%;
    	box-sizing: border-box;
		padding: 5px;
	}
	.number-keyboard_box-item-label{
		display: flex;
		background-color: #ffffff;
		padding: 5px;
		border-radius: 5px;
		width: 100%;
		height: 48px;
		align-items: center;
		justify-content: center;
	}
	.number-keyboard_box-item-ico{
		width: 60px;
	}
</style>

组件使用说明

本组件是基于AVM.js开发的多端组件,通常同时适配Android、iOS、小程序、H5 , 具体支持情况还要看每个组件的说明文档。

首先需要登录开发平台,http://www.apicloud.com。 通过控制平台右上方的模块Store进入,然后选择AVM组件。

 

找到对应模块进入

 

 也可通过搜索栏,通过组件名称关键字进行检索。

进入模块详情,点击立即下载下载完整的组件安装包。  

 

组件压缩包的文件目录如下

 

也可通过查看模块文档 来了解模块的具体参数,引用的原生模块,注意事项等。 

 

具体在项目中的使用步骤是,第一步将压缩文件中的number-keyboard.stml文件拷贝到项目的components目录,通过阅读readme.md 文档和查看demo示例文件 demo-number-keyboard.stml在需要开发的stml文件中,引入组件文件,完成页面的开发。

关于随机数字键盘的原理是运用了数组的sort排序。

sort() 方法,有一个可选参数,必须是函数,供它调用。那么就是个回调函数咯!😁

回调函数的参数要有两个:第2个参数的元素肯定在第1个参数的元素前面!

这个方法的排序是看回调函数的返回值:

如果返回值大于 0,则位置互换。
如果返回值小于 0,则位置不变。
第一次比较:7>9,结果为 false,即 return -1,此时 a 会换到 b 前面,即 7 在 9 之前,所以位置互换。

demo-number-keyboard.stml

<template>
	<view class="page">
		<safe-area></safe-area>
		<text class="number-box" @click="openNumberBoard">{isModel?'支持':'不支持'}双向绑定:{number}</text>
		<number-keyboard
			:limitLengh="limit"
			:recnetNumber="arrNumber"
			:isRandom="isRandom"
			:isModel="isModel"
			onclose="closeNumberBoard" 
			onsetNumber="getNumber" 
			ondelNumber="deleteNumber"
			v-if="isShowNUmberBoard">
		 </number-keyboard>
	</view>
</template>
<script>
	import '../../components/number-keyboard.stml'
	export default {
		name: 'demo-random-number-keyboard',
		apiready(){//like created

		},
		data() {
			return{
				isShowNUmberBoard:false,
				number:'',
				arrNumber:[],
				limit:6,
				isRandom:false,
				isModel:false  //是否支持双向绑定
			}	
		},
		methods: {
			closeNumberBoard(e){
				this.data.isShowNUmberBoard = false;
			},
			openNumberBoard(e){
				this.data.isShowNUmberBoard = true;
			},
			getNumber(e){
				// console.log(JSON.stringify(e));
				this.data.arrNumber = e.detail;
				this.data.number = e.detail.join('');
			},
			deleteNumber(e){
				api.toast({
					msg:'点击回退、删除键'
				})
				//可根据需要处理显示的内容
				this.data.number='';
			}
		}
	}
</script>
<style>
	.page {
		height: 100%;
		background-color: #ffffff;
	}
	.number-box{
		font-size: 20px;
	}
</style>

如果在AVM组件库中,没有找到实际项目中需要的组件,可以自己尝试封装组件。

这是组件化开发的在线文档地址

 

小程序开发中的虚拟数字键盘问题及解决方案 在 iOS 平台中,我们使用 wx.createSelectorQuery 获取输入框位置信息,并计算出距离键盘顶部的距离,以及输入框与键盘底部之间的距离差。如果差值小于 0,则表示输入框被键盘遮挡,此时我们可以使用 wx.createSelectorQuery 获取滚动视图信息,并根据需要手动调整输入框位置。而在 Android 平台中,则直接计算出输入框与键盘底部之间的距离差,如果差值小于 0,则为输入框添加一个底部距离即可。 阅读详情

相关推荐

react虚拟数字键盘

react虚拟数字键盘

m0_61020706的博客 1048

【uniapp】uniapp实现input输入显示数字键盘:

【uniapp】uniapp实现input输入显示数字键盘:

SunPeng的博客 5965

触摸屏虚拟键盘组件 jQuery Virtual Keyboard使用 自定义键盘

触摸设备,虚拟键盘

jmszl1991的博客 913

Android 自定义数字虚拟键盘

大概两年没写文章了,有些生疏,不知如何动笔,很早以前有过转行的想法,想过考公务员,所以重心不在程序上。近期通过内推的形式入职了一家大公司(社保公积金缴全额,双休,带薪十三天年假,少加班),这么好的福利让我有了稳定下来的想法,打工嘛,无非是想多赚点钱,生活过得更好是吧,于是有了这篇分享。

阳光心态的博客 703

Qt Quick-QML虚拟软键盘详解

在上面的示例中,我们使用了一个矩形(Rectangle)作为虚拟软键盘的容器,并在其中定义了一个GridLayout来布局键盘的按键。在Qt Quick应用程序开发中,虚拟软键盘是一个重要的组件,它提供了一种方便的方式让用户在触摸屏设备上输入文本。在实际的应用程序中,我们可以根据需求自定义虚拟软键盘的样式和布局,并通过与其他组件的交互实现文本输入的功能。虚拟软键盘的设计和实现可以根据具体的应用需求而变化,但是我们可以通过以下步骤来创建一个基本的虚拟软键盘。在这个组件中,我们可以定义键盘的布局和样式。

FucMobile的博客 1454

html5 数字键盘 软键盘

html5 数字键盘 软键盘 可用于制作html5版本的支付控件,金额支付等

[AHK]虚拟数字小键盘(NumPad) v3.0 绿色免费版(ahk实现作品,作者小恐龙)

下载地址:http://www.jb51.net/softs/236081.html NumPad 是一款桌面虚拟数字小键盘软件,非常适合触屏笔记本没有小键盘区的同学,输入数字时使用,比如有录入 Excel 数据时使用,支持置顶显示 NumPad 运行后,然后切换到你需要录入数据的窗口,比如 Excel,按下快捷键 Win + K 获取焦点,之后在 NumPad 输入的数据都会自动

liuyukuan的专栏 9598

使用Vue自定义数字键盘组件(体验度极好)

最近做 Vue 开发,因为有不少页面涉及到金额输入,产品老是觉得用原生的 input 进行金额输入的话 体验很不好,于是自己动手写了一个使用Vue自定义数字键盘组件,具体实现代码大家参考下本

[开源工具]Win10-87键盘如何使用数字小键盘功能?

87键盘小巧好用,但是经常有困扰,如何使用数字小键盘功能,win10帮我们解决了这个问题!

学生董格 5115

MICROSAR OS:第一个task是如何执行起来的?

MICROSAR OS是Vector公司开发的符合AUTOSAR OS规范的实时操作系统。本文介绍MICROSAR

humu7733的博客 2569

jira bug 仪表盘

背景: 更直观管理bug,方便项目组内人员,创建、修改、关闭bug 使用的场景: 筛选器结果:可用来展示open、什么级别open的问题,方便督促开发快速解决问题 2维筛选器统计:统计经办人下bug状态是open,具体什么等级的数量。有利于开发可以调整工作进度 问题统计: 统计某版本,产出对应等级的bug数量,用于后期测试报告的编写 饼图:直观展示筛选人员的bug,例如想要看出每位测试人员产出bug比例 创建与解决的问题对比图: ...

chuanying_xiaoqi的博客 814

虚拟键盘(不是软键盘)——科幻世界!!!

如何使用摄像头、Mediapipe和OpenCV创建一个虚拟键盘,用户可以通过手部动作来“按压”虚拟键盘上的按键。代码通过检测手部位置和动作来确定哪个按键被按压,然后模拟实际的键盘输入。

WenJGo的博客 1285

信号处理中的滤波器的阶数和谐波的理解

最近在读paper的时候,遇到了一些以前遗忘的问题,先重新查找,记录在这里,以备不时之查看。 我相信一定有小伙伴跟我有过一样的疑惑,那就是我们在使用滤波器的时候,总是遇到滤波器的阶数这个概念参数,我们很多都是根据别的paper里的设置,设置自己的科研参数,其实并不是很理解其中的含义: 其实我们常用的阶数N的意思是: 滤波器的阶数,就是指过滤谐波的次数,一般来讲,同样的滤波器,其阶

Miracle.Zhao的博客 2万+

【亲测免费】 虚拟键盘(VirtualKeyboard) 使用指南

虚拟键盘(VirtualKeyboard)是一款基于Python或JavaScript实现的轻量级虚拟输入设备项目。该项目由GitHub上的用户[@qilin02811](https://github.com/qilin02811)维护,旨在为开发者提供一个在网页或特定应用程序中模拟键盘输入功能的工具。它可以用于无障碍访问技术、自动化测试场景或者任何需要模拟键盘操作的应用情境。虚拟键盘支持自定义布...

gitblog_01158的博客 2875

MuJoCo 关节角速度记录与可视化,监控机械臂运动状态

1. 手动计算关节速度,其中timestep为仿真步长。2. 使用data.qvel直接取得关节速度。

darcsdn 767

从Applied Intelligence被拒到The Visual Computer录用:我的计算机视觉论文投稿时间线全记录(含详细修改意见)

本文详细记录了作者从Applied Intelligence被拒到The Visual Computer成功发表计算机视觉论文的全过程,重点分享了如何将模糊的拒稿理由转化为具体改进方案。文章包含技术改进细节、写作调整策略以及期刊选择经验,为计算机视觉领域的研究者提供了实用的投稿指南。

weixin_30872499的博客 465

Windows中虚拟键盘的启用:简单几步轻松搞定

在Windows操作系统中,虚拟键盘是一个非常有用的工具,尤其在你需要输入特殊字符或在没有物理键盘的情况下使用电脑时。一旦虚拟键盘打开,你可以使用鼠标点击虚拟键盘上的按键来输入字符。按 Win + R 键打开“运行”对话框,输入 control 并按回车键。在搜索结果中,点击“打开虚拟键盘”或“osk.exe”。滚动到底部,找到“使用虚拟键盘”选项,将其开关打开。在轻松使用中心中,点击“使用计算机上的键盘”。在控制面板中,选择“轻松使用中心”。在辅助功能菜单中,选择“键盘”。在搜索框中输入“虚拟键盘”。

leleshengh520的博客 9373

编织数据的实时脉络——构建基于MySQL的数据编织平台,实现实时数据治理

除了上述基本设置外,我们还可以根据实际应用场景自定义一些特定的监控项目。例如,对于某些高并发读写的表,可能需要特别关注它们的锁等待时间和回滚段使用率;而对于涉及到跨库关联查询的操作,则应当着重检查网络延迟及缓存命中率等因素。-- 获取InnoDB行级锁等待情况-- 统计各表的缓存命中率这段SQL脚本不仅展示了如何查询InnoDB引擎下的锁争用状况,还介绍了计算表级别缓存命中率的方法,有助于深入理解系统的运行状态。

墨夶的博客 1789

vue 管理后台 使用虚拟键盘组件 支持中英文切换

vue 管理后台 使用虚拟键盘组件 支持中英文切换

蓝胖子的博客 6931

openclaw-cn : 无法将“openclaw-cn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

本文主要介绍了openclaw-cn : 无法将“openclaw-cn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案,希望能对使用openclaw-cn的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 10万+

YOLO11 锚框机制全解析:从改进 K-means 聚类到自适应优化,附多场景实战(附代码)

摘要 YOLO11的锚框机制采用"自适应、动态化、场景感知"的设计理念,通过数据驱动的锚框生成、多尺度感知分配和实时优化策略,显著提升目标检测性能。相较于早期YOLO版本,YOLO11的锚框完全基于训练集目标分布自适应生成,并引入智能分配策略,使不同尺寸目标获得最优匹配。技术架构包含自适应锚框生成、多尺度分配器和动态优化模块,通过改进的K-means聚类和交并比计算实现精准匹配。YOLO11锚框机制在检测精度、训练稳定性和场景适应性方面均有显著提升,为复杂场景下的目标检测提供更优解决方案

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1319

vue 虚拟数字键盘

<div id="keyboardDiv" class="keyboardDiv keyboardStyle" style="display:none;position:fixed;z-index:20;" @mousedown="keyBoardFocusEvent" > <ul class="keyBox"> <li class="keyStyle" data-key="1" data-code="49" @mousedown="keyDown($event)"

qq_38321137的博客 2404

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

vue实现虚拟键盘

前端vue使用Simple-keyboard实现虚拟键盘,喜欢就点个赞鼓励一下吧

m0_57005111的博客 2819

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

LabVIEW虚拟键盘程序 分两个键盘,一个是输入数字的,一个是输入字符串的。 带一个示例程序

当调用子VI时,主界面会自动隐藏未使用的键盘面板,这样运行时就看不到界面闪动的情况。需要中文输入的场景可以试试我之前开源的另一个支持IME切换的版本——那个版本甚至能识别方言拼音,不过就是资源占用大了点。有个彩蛋功能:在数字键盘快速滑动输入,会触发类似老式电话的拨号音效,现场操作员反馈这个细节让他们找回了当年用实体按键的手感。这个程序不支持输入法的切换,不过我发布有另一个键盘程序可支持切换中文输入法来输入汉字。分两个键盘,一个是输入数字的,一个是输入字符串的。带一个示例程序,演示输入控件按下后弹出键盘。

Q27699885的博客 380

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

如何用qt实现虚拟数字小键盘

【代码】如何用qt实现虚拟数字小键盘。

SpacePotato的博客 1181

Web 版翻译者资料库

本项目是桌面版《翻译者资料库》的 Web 移植版,基于 Spring Boot 3.3、Thymeleaf、Bootstrap 5.3 与 MySQL 8.0 构建。它面向翻译写作提供资料、词汇、句库、文本工具、对照制作、查找、备份恢复及旧库迁移等功能,完整继承桌面版核心业务规则,支持一键启动与离线访问。

howard2005的专栏 137
上一篇: APICloud AVM框架 封装树形分类选择组件 组件递归调用
下一篇: APICloud AVM框架 封装身份证号码虚拟输入键盘组件
白鱼赤乌
博客等级 码龄10年 7粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白鱼赤乌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值