QML编程:实现一个数字软件盘的功能(一)

  本文描述如何通过QML编程实现一个满足自己需求的数字软件盘的功能,
功能需求:
  1.可以查看临时数值设置,
  2.可以通过滑动slider实现快速设置
  3.原值记录功能
首先根据功能需求设计小键盘的风格,可分为临时数值显示区和输入区
画面脚本源码如下:

import QtQuick 2.4
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.0
import QtQuick.Controls.Material 2.2

import Custom.Controls 2.0

CategoryPageBackGround {
    id: categoryPageBackGround
    width: 800
    height: 160
    property alias clear: clear
    property alias cancel: cancel
    property alias enter: enter
    property alias customButton5: customButton5
    property alias customButton3: customButton3
    property alias customButton13: customButton13
    property alias customButton12: customButton12
    property alias customButton7: customButton7
    property alias customButton1: customButton1
    property alias customButton9: customButton9
    property alias customButton6: customButton6
    property alias customButton4: customButton4
    property alias customButton2: customButton2
    property alias customButton: customButton
    property alias customButton8: customButton8
    property alias customButton16: customButton16
    property alias customButton15: customButton15
    property alias customerSlider: customerSlider
    property alias customSpinBox: customSpinBox

    RowLayout {
        x: 8
        y: 11
        anchors.verticalCenter: parent.verticalCenter
        anchors.right: parent.right
        anchors.rightMargin: 35

        ColumnLayout {

            CustomSpinBox {
                id: customSpinBox
                editable: false
                enabled: false
                value: customerSlider.value
                stepSize: Math.pow(10, -decimals)
                to: customerSlider.to
                from: customerSlider.from
                Layout.fillWidth: true
                Layout.fillHeight: true
                Layout.preferredHeight: 24
                Layout.preferredWidth: 208
                indicatorsVisible: false
            }

            CustomerSlider {
                id: customerSlider
                from: -20
                orientation: Qt.Horizontal
                stepSize: customSpinBox.stepSize
                focusPolicy: Qt.NoFocus
                to: 100
                value: 0
                handleRadius: 12
                Layout.fillHeight: true
                Layout.fillWidth: true
                Layout.columnSpan: 2
                Layout.preferredHeight: 48
                Layout.preferredWidth: 208
            }
        }

        Rectangle {
            id: rectangle
            color: "#3c3c3c"
            Layout.fillHeight: true
            Layout.fillWidth: true
            Layout.rowSpan: 3
            Layout.preferredHeight: 143
            Layout.preferredWidth: 2
        }

        GridLayout {
            Layout.fillHeight: true
            Layout.fillWidth: true
            Layout.rowSpan: 3
            rows: 2
            columns: 6

            CustomButton {
                id: customButton8
                focusPolicy: Qt.NoFocus
                text: "1"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: customButton
                focusPolicy: Qt.NoFocus
                text: "2"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: customButton2
                focusPolicy: Qt.NoFocus
                text: "3"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: customButton4
                focusPolicy: Qt.NoFocus
                text: "4"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: customButton6
                focusPolicy: Qt.NoFocus
                text: "5"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: enter
                focusPolicy: Qt.NoFocus
                text: "Enter"
                Layout.fillHeight: true
                Layout.fillWidth: true
                Layout.rowSpan: 2
                Layout.preferredHeight: 97
                Layout.preferredWidth: 64
            }

            CustomButton {
                id: customButton9
                focusPolicy: Qt.NoFocus
                text: "6"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: customButton1
                focusPolicy: Qt.NoFocus
                text: "7"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: customButton3
                focusPolicy: Qt.NoFocus
                text: "8"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: customButton5
                focusPolicy: Qt.NoFocus
                text: "9"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: customButton7
                focusPolicy: Qt.NoFocus
                text: "0"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: customButton12
                focusPolicy: Qt.NoFocus
                text: "."
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: customButton13
                focusPolicy: Qt.NoFocus
                text: "-"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: clear
                focusPolicy: Qt.NoFocus
                text: "C"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: cancel
                focusPolicy: Qt.NoFocus
                text: "Cancel"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }

            CustomButton {
                id: customButton15
                focusPolicy: Qt.NoFocus
                text: "<<"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }
            CustomButton {
                id: customButton16
                focusPolicy: Qt.NoFocus
                text: ">>"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }
        }
    }
}

设计效果如下:
这里写图片描述

逻辑代码的实现如下:

import QtQuick 2.4
import Custom.Controls 2.0
InputFlowForm {
    property string inputText;
    property bool dot: false;
    property string lastText;
    enter.onClicked: {
        //enter
        if(inputText!=""){
            lastText=inputText;
            inputText="";
            dot=false;
        }
        var obj=CustomSinglentonControls.manager["CurrentObject"];
        obj.value=customSpinBox.value
    }
    cancel.onClicked: {
        //cancel
        inputText="";
        dot=false;
        customSpinBox.value=Number.fromLocaleString(customButton5.locale,lastText);
    }
    customButton5.onClicked: {
        //Number 9
        inputText+=customButton5.text;
        customSpinBox.value=Number.fromLocaleString(customButton5.locale,inputText);
    }
    customButton3.onClicked: {
        //Number 8
        inputText+=customButton3.text;
        customSpinBox.value=Number.fromLocaleString(customButton3.locale,inputText);
    }
    clear.onClicked: {
        //clear
        inputText="";
        dot=false;
        customSpinBox.value=Number.fromLocaleString(clear.locale,inputText);
    }

    customButton13.onClicked: {
        // -
        if(inputText===""){
            console.log("value: ",customSpinBox.value);
            inputText="-0";
            customSpinBox.value=Number.fromLocaleString(customButton13.locale,inputText);
        }
    }
    customButton12.onClicked: {
        // .
        if(dot===false){
            inputText+=customButton12.text;
            dot=true;
        }
    }
    customButton7.onClicked: {
        //Number 0
        inputText+=customButton7.text;
        customSpinBox.value=Number.fromLocaleString(customButton7.locale,inputText);
    }
    customButton1.onClicked: {
        //Number 7
        inputText+=customButton1.text;
        customSpinBox.value=Number.fromLocaleString(customButton1.locale,inputText);
    }
    customButton9.onClicked: {
        //Number 6
        inputText+=customButton9.text;
        customSpinBox.value=Number.fromLocaleString(customButton9.locale,inputText);
    }
    customButton6.onClicked: {
        //Number 5
        inputText+=customButton6.text;
        customSpinBox.value=Number.fromLocaleString(customButton6.locale,inputText);
    }
    customButton4.onClicked: {
        //Number 4
        inputText+=customButton4.text;
        customSpinBox.value=Number.fromLocaleString(customButton4.locale,inputText);
    }
    customButton2.onClicked: {
        //Number 3
        inputText+=customButton2.text;
        customSpinBox.value=Number.fromLocaleString(customButton2.locale,inputText);
    }
    customButton.onClicked: {
        //Number 2
        inputText+=customButton.text;
        customSpinBox.value=Number.fromLocaleString(customButton.locale,inputText);
    }
    customButton8.onClicked: {
        //Number 1
        inputText+=customButton8.text;
        customSpinBox.value=Number.fromLocaleString(customButton8.locale,inputText);
    }

    customButton16.onClicked: {
       // >>
       customerSlider.increase();
       inputText=Number(customerSlider.value).toLocaleString(locale,'f',customSpinBox.decimals)
    }
    customButton15.onClicked: {
        // <<
        customerSlider.decrease();
        inputText=Number(customerSlider.value).toLocaleString(locale,'f',customSpinBox.decimals)
    }
    customerSlider.onValueChanged: {
        if(customerSlider.value!=customSpinBox.value){
            customSpinBox.value=customerSlider.value;
        }
    }
    customSpinBox.onValueChanged: {
        if(customerSlider.value!=customSpinBox.value){
            customerSlider.value=customSpinBox.value;
        }
    }
}

最终的显示效果如下:
这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
好的,下面是一个简单的 QML 记事本的实现: ``` import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 ApplicationWindow { id: mainWindow width: 640 height: 480 visible: true title: "QML记事本" // 布局 ColumnLayout { anchors.fill: parent // 文本编辑器 TextArea { id: textEditor Layout.fillWidth: true Layout.fillHeight: true } // 操作栏 RowLayout { Layout.fillWidth: true // 新建按钮 Button { text: "新建" onClicked: { textEditor.text = ""; } } // 打开按钮 Button { text: "打开" onClicked: { var fileDialog = Qt.createQmlObject('import QtQuick.Dialogs 1.2; FileDialog { selectMultiple: false; selectFolder: false }', mainWindow); fileDialog.visible = true; fileDialog.onAccepted: { var fileUrl = fileDialog.fileUrl; if (fileUrl !== "") { var file = new XMLHttpRequest(); file.open("GET", fileUrl); file.onreadystatechange = function() { if (file.readyState === XMLHttpRequest.DONE) { textEditor.text = file.responseText; } } file.send(); } } } } // 保存按钮 Button { text: "保存" onClicked: { var fileDialog = Qt.createQmlObject('import QtQuick.Dialogs 1.2; FileDialog { selectMultiple: false; selectFolder: false }', mainWindow); fileDialog.visible = true; fileDialog.onAccepted: { var fileUrl = fileDialog.fileUrl; if (fileUrl !== "") { var file = new XMLHttpRequest(); file.open("PUT", fileUrl); file.send(textEditor.text); } } } } } } } ``` 上述代码中,我们使用了 `ApplicationWindow`、`ColumnLayout`、`TextArea`、`RowLayout` 和 `Button` 等 QML 控件来实现记事本的 UI。具体实现如下: - `ApplicationWindow` 是整个窗口的容器,其中包含了一个 `ColumnLayout`。 - `TextArea` 是文本编辑器控件,用于输入和显示文本内容。 - `RowLayout` 是操作栏控件,用于放置新建、打开和保存按钮。 - 每个按钮都有一个 `onClicked` 事件处理程序,用于执行对应的操作。在打开和保存按钮的事件处理程序中,我们使用了 `FileDialog` 对话框来选择文件并进行读写操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值