首页 > 其他分享 >034-第三代软件开发-自定义Slider(一)

034-第三代软件开发-自定义Slider(一)

时间:2023-11-05 20:36:27浏览次数:49  
标签:case 自定义 width break Slider position voltageRange 034


034-第三代软件开发-自定义Slider(一)_Qt

第三代软件开发-自定义Slider(一)


文章目录

  • 第三代软件开发-自定义Slider(一)
  • 项目介绍
  • 自定义Slider(一)
  • 总结一下



关键字:

Qt

Qml

Slider

position

关键字5

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!


自定义Slider(一)

这部分代码是由我们的小伙伴开发,这里做一下分享,按照我的习惯我肯定是不会自己写一个的,我会去该Qt自带Slider 得样式,不过看代码,我们的小伙伴是自己实现了一个。后面我在写简单的视频播放器的时候,会有自定义Slider(二出现)。

小伙伴博客ID:


034-第三代软件开发-自定义Slider(一)_Slider_02

import QtQuick 2.0
Item {
    id: root
    // 游标所在位置
    property int position: 5
    // 最多有多少刻度
    property int maxSchedule: 11
    // 显示字符串位置 -1左 0无 1右
    property int textLocation: 0
    // 字符串所占位置宽度  为 小于等于 0值 表示没有
    property int textWidth: 150
    // 字符穿内容 长度应该为刻度值+1
    property var textData: []
    // 刻度间隔
    property real spac: 4
    // 刻度条宽度(不含间隔)
    property int barWidth: 20
    // 刻度条宽度
    property int barWidthContain: barWidth + spac


    width: textLocation == 0 ? processBar.width+40 : processBar.width + textWidth +40
    height: 60

    Component.onCompleted: {
        //        console.log(textData.length)
    }

    // 背景图
    Image {
        id: backSlider
        source: textLocation == -1 ? "qrc:/MainWindow/T_Resource/T_Image/MainWindow/Thyroid/Slider/bg_time.png" : "qrc:/MainWindow/T_Resource/T_Image/MainWindow/Thyroid/Slider/bg.png"
        anchors.centerIn: parent

        width: textLocation == 0 ? processBar.width+40 : processBar.width + textWidth +40

        //        anchors.margins: 20


        // 游标刻度显示
        Text {
            id: sliderText
            // 防止提供刻度值不够
            text: textData.length > position ? textData[position] : "null"

            width: textWidth
            height: 20

            visible: textLocation == 0 || textWidth == 0 ? false : true

            color: "#D8D8D8"

            x: textLocation == -1 ? 20 : textLocation == 1 ? backSlider.width - textWidth  : 0
            y: backSlider.height / 2 - height / 2

        }

        // 进度条
        Image {
            id: processBar

            width: 8 + maxSchedule * barWidthContain

            height: 10

            x: textLocation == 1 ? 20 : textLocation == -1 ? backSlider.width - processBar.width-20  : 20
            y: backSlider.height / 2 - height / 2


            source: "qrc:/MainWindow/T_Resource/T_Image/MainWindow/Thyroid/Slider/slider_bar.png"



            // 刻度
            ListView {
                id:list

                spacing:spac
                orientation: ListView.Horizontal
                width: processBar.width
                height: 10

                x: spac



                model: maxSchedule

                interactive: false

                delegate: Rectangle{
                    width: barWidth
                    height: 4
                    y: processBar.height / 2 - height / 2
                    color: index < position ? "#00B1FF" : "#53555C"
                }

                //点击进度条时实现快速快进快退
                MouseArea{
                    anchors.fill: parent
                    onClicked: {
                        position = (mouseX+barWidthContain/2)/barWidthContain
                        for(var i=1;i<maxSchedule;i++)
                        {
                            if(i < position)
                            {
                                list.currentIndex = i   //点击选中哪一项
                                list.currentItem.color = "#00B1FF"
                            }
                            else
                            {
                                list.currentIndex = i  //点击选中哪一项
                                list.currentItem.color = "#53555C"
                            }
                        }
                    }
                }


                // 游标
                Image {
                    id: sliderRect
                    source: "qrc:/MainWindow/T_Resource/T_Image/MainWindow/Thyroid/Slider/pointer.png"


                    x: position==0 ? 0-sliderRect.width/2 : position*barWidthContain - spac -sliderRect.width/2
                    y: list.height / 2 - height / 2 +2

                    MouseArea{
                        anchors.fill: parent
                        onm ouseXChanged: {
                            if(mouseX>barWidth+sliderRect.width/2)
                            {
                                if(position < maxSchedule)
                                {
                                    list.currentIndex = position   //点击选中哪一项
                                    list.currentItem.color = "#00B1FF"
                                    position++

                                }
                            }
                            if(mouseX<0)
                            {
                                if(position > 1)
                                {
                                    list.currentIndex = position-1   //点击选中哪一项
                                    list.currentItem.color = "#53555C"
                                    position--
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

使用法子:

Turing_Slider{
    id:slider_voltage
    anchors.left: parent.left
    anchors.bottom: parent.bottom
    visible: false
    position: UserProfile.voltageRange
    maxSchedule: 13
    textLocation: 1
    textWidth: 80
    textData: ["","20uV","50uV","100uV","200uV","500uV","1KuV","2KuV","5KuV","1WuV","2WuV","5WuV","10WuV","自适应"]
    onPositionChanged: {
        UserProfile.voltageRange = position;
        switch (position){
        case 1:set_voltageRange(20);playSound.play();break
        case 2:set_voltageRange(50);playSound.play();break
        case 3:set_voltageRange(100);playSound.play();break
        case 4:set_voltageRange(200);playSound.play();break
        case 5:set_voltageRange(500);playSound.play();break
        case 6:set_voltageRange(1000);playSound.play();break
        case 7:set_voltageRange(2000);playSound.play();break
        case 8:set_voltageRange(5000);playSound.play();break
        case 9:set_voltageRange(10000);playSound.play();break
        case 10:set_voltageRange(20000);playSound.play();break
        case 11:set_voltageRange(50000);playSound.play();break
        case 12:set_voltageRange(100000);playSound.play();break
        case 13:set_voltageRange(0);playSound.play();break
        }
    }

总结一下

这个Slider意义在于提供一个思路,而复用性应该没有太多,包括我们项目中,也没法复用,可以说是专门为了某一个功能定制的。参考参考


034-第三代软件开发-自定义Slider(一)_刻度_03


标签:case,自定义,width,break,Slider,position,voltageRange,034
From: https://blog.51cto.com/DreamLife/8195024

相关文章

  • Spring自定义数据校验并实现国际化功能
    通常,当我们需要验证用户输入时,SpringMVC提供标准的预定义验证器。我们会引入spring-boot-starter-validation依赖来实现数据校验功能。但是,当我们需要验证特定类型的输入时,我们就需要创建自己的自定义校验逻辑。这里我们取一个相对简单的校验手机号码的功能来实现。为了校验手......
  • 苹果iOS 17.2年底推送:iPhone 15 Pro的自定义操作按钮功能升级
    据报道,苹果会在年底推送iOS17.2版本,新版系统将会修复iPhone15系列WiFi速度慢的问题。与此同时,iOS17.2将会带来翻译功能,iPhone15Pro的自定义操作按钮切换到翻译选项后,按住会弹出一个翻译窗口,用于翻译设备听到的语音内容。除此之外,这枚自定义操作按钮还可以设置为其它很多功......
  • Windows下,Jar包启动时,自定义cmd窗口名称
    新建bat文件;输入并替换内容; @echoofftitleAPI_XXXX-%date%-%time%-%cd%)java-Dfile.encoding=utf-8 -jar-Xms1024m-Xmx2048m-XX:PermSize=128M-XX:MaxPermSize=256M-Xdebug-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6002XXXX.jar ......
  • prometheus添加自定义监控与告警(etcd为例)
    一、步骤及注意事项(前提,部署参考部署篇)一般etcd集群会开启HTTPS认证,因此访问etcd需要对应的证书使用证书创建etcd的secret将etcd的secret挂在到prometheus创建etcd的servicemonitor对象(匹配kube-system空间下具有k8s-app=etcd标签的service)创建service关联被监控对象二、......
  • 如何做到像坚果云这样自定义 Windows 文件资源管理器的 UI?
    要像坚果云那样自定义Windows文件资源管理器的UI,你可以尝试以下几个步骤:开发一个Shell扩展:使用WindowsShell编程,你可以开发一个Shell扩展程序,它可以插入到Windows文件资源管理器中,并扩展其功能。可以使用编程语言,如C++或C#来编写Shell扩展。注册Shell扩展:一旦你开发完成Shell扩展,......
  • Layui自定义icon图标
    在使用Layui进行开发时,会使用:<iclass="layui-icon">&#xe60c;</i>或者<iclass="layui-iconlayui-icon-face-smile"style="font-size:30px;color:#1E9FFF;"></i>进行图标的引入,但是官方给的图标毕竟有限,有时候没有自己想要的,但在阿里巴巴矢量图标库(ht......
  • 自定义简单的axios方法
    functionmyAxios(config){returnnewPromise((resolve,reject)=>{constxhr=newXMLHttpRequest()//如果存在想要放在链接后的参数?name=1&password=2if(config.params){constparamsObj=newURLSearchParams(conf......
  • springboot自定义Starter(超简捷)
    啥也不说,新建一个新的Maven项目引入Spring必要依赖autoconfigure这个依赖是SpringBoot框架的自动配置依赖,它包含了大量的自动配置类,用于根据应用程序的配置和环境,在应用程序启动时自动配置各种组件和属性。通过这个依赖,可以实现一些常见的配置,如数据库连接、缓存、消息队列......
  • 创建自定义美颜滤镜:使用第三方美颜SDK的步骤指南
    美颜滤镜在现代移动应用和直播平台中变得越来越受欢迎。它们可以让用户在自拍照片、视频聊天或实时直播中看起来更加美丽和自信。如果您是一位应用开发者,想要增加美颜滤镜功能,但又不想从头开始构建整个系统,那么使用第三方美颜SDK可能是一个明智的选择。第1步:选择适合的第三方美颜SD......
  • powershell自定义命令,类型linux的alias
    linux里经常取很多alias来方便敲命令。在win上也有类型功能,之前边百度边配过一次,然后今天要加一些,发现记不起来了。百度也不顺利。然后就找了一下之前的命令在哪里。C:\Windows\System32\WindowsPowerShell\v1.0下的profile.ps1。把自定义的函数写进去。就可以直接在powershell......