IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> QML自定义TextField控件 -> 正文阅读

[移动开发]QML自定义TextField控件

????????QML中QtQuick提供的文本编辑框控件包括 TextInput,TextField,TextEdit,TextArea。Textlnput 与 TextField 为行编辑控件,TextEdit 与 TextArea 为块编辑控件。

? ? ? ? 行编辑框中,TextInput没有默认边框需自行定义外框,使用起来没有TextField方便,项目中大多选用TextField,自定义TextField控件时,只需要定义其背景、字体、鼠标选中、文字位置等属性。自定义的控件具体见代码文件TextField.qml:

/*
* 自定义QML CheckBox
* Since:Qt 5.7 采用QtQuick.Controls 2.12库(2.0版)
*/

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls.impl 2.12
import QtQuick.Templates 2.12 as T

T.TextField {
    id: control;

    implicitWidth: implicitBackgroundWidth;
    implicitHeight: implicitBackgroundHeight;
    padding: 6; // TextField内部上下左右的距离
    leftPadding: padding + 4; // 文字距离左边界的距离

    color: "#333333";   // 字体颜色
    font.pixelSize: 12; // 字体大小
    font.family: "Microsoft YaHei"; // 字体
    selectByMouse: true;
    selectionColor: control.palette.highlight; // 鼠标选中文字的背景颜色
    selectedTextColor: control.palette.highlightedText; // 鼠标选中文字的字体颜色
    placeholderTextColor: Color.transparent(control.color, 0.5); // 预显示字体颜色(为正式字体的一半色彩)
    verticalAlignment: TextInput.AlignHCenter; // 文本水平对齐方式
    renderType: Text.NativeRendering;  // 字体渲染类型 与本地平台有关,此处可使字体更加清晰
    // 正则输入限制,此处表示不限制输入
    validator: RegExpValidator { regExp: /.*/ }

    // 占位符文本属性设置
    PlaceholderText {
        id: placeholder;
        x: control.leftPadding;
        y: control.topPadding;  // 文本渲染位置
        width: control.width - (control.leftPadding + control.rightPadding);
        height: control.height - (control.topPadding + control.bottomPadding);
        text: control.placeholderText;
        font: control.font;
        color: control.placeholderTextColor;
        verticalAlignment: control.verticalAlignment;
        visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter);
        elide: Text.ElideRight;
        renderType: control.renderType;
    }

    // 文本输入框背景属性设置
    background: Rectangle {
        radius: 3;
        implicitWidth: 120;
        implicitHeight: 30;
        color: control.readOnly ? "#EEEFF7" : "#FFFFFF";
        border.width: 1;
        border.color: "#E5E5E5";
    }

}

? ? ? ? 上面自定义代码中没有限制其正则输入,本文提供几种常用的正则限制,针对不同的输入框代码如下:

// 浮点数输入 如: 0.23 1.34E-5
validator: RegExpValidator { regExp: (/^[-\+]?\d*\.?\d+([Ee][-\+]?\d+)?/) }

// 整数输入 0 ~ 9999999位
validator: RegExpValidator { regExp: (/^\d{0,7}$/) }

// 汉字输入 和 - 只能输入120个
validator: RegExpValidator { regExp: (/[\w\s-]{1, 120}/) }

// A-Za-z0-9输入
validator: RegExpValidator { regExp: (/^[A-Za-z0-9]+$/) }

// 整数输入 0 ~ 9999999位
validator: RegExpValidator { regExp: (/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/) }

// Email输入
validator: RegExpValidator { regExp: (/^\d{0,7}$/) }

// 日期输入
validator: RegExpValidator { regExp: (/^\d{4}-\d{1,2}-\d{1,2}/) }

自定义控件应用:

在main.qml中引入两种控件qml路径as成My,并使用此Controls具体见代码实现:

import QtQuick 2.0
import QtQuick.Window 2.0
import QtQuick.Controls 2.12
import "myControl" as My

Window {
    visible: true;
    width: 640;
    height: 480;
    title: qsTr("自定义Control");

    My.Label {
        anchors.top: parent.top;
        anchors.topMargin: 56;
        anchors.right: text1.left;
        anchors.rightMargin: 15;
        text: qsTr("汉字输入");
    }

    My.TextField {
        id: text1;
        width: 150;
        anchors.top: parent.top;
        anchors.topMargin: 50;
        anchors.left: parent.left;
        anchors.leftMargin: 100;
        placeholderText: qsTr("预显示字体");
    }

    My.Label {
        anchors.top: text1.bottom;
        anchors.topMargin: 56;
        anchors.right: text2.left;
        anchors.rightMargin: 15;
        text: qsTr("浮点数输入");
    }

    My.TextField {
        id: text2;
        width: 150;
        anchors.top: text1.bottom;
        anchors.topMargin: 50;
        anchors.left: parent.left;
        anchors.leftMargin: 100;
        text: qsTr("1.25e-5");
    }
}

自定义控件展示:

如下图:

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 02:05:58  更:2022-01-14 02:08:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:40:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码