023-第三代软件开发-自定义Button

news/2024/7/4 22:33:03 标签: Qt, Qml, Button, Quick, Quick2
头图

Button_2">第三代软件开发-自定义Button

文章目录

  • 第三代软件开发-自定义Button
    • 项目介绍
    • 自定义Button
      • 第一类型-加声音
      • 第二类型-加样式
    • 第三类型-减声音
    • 总结一下
      • 存在一点小问题

关键字: QtQmlButton关键字4关键字5

项目介绍

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

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

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

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

重要说明☝

☀该专栏在第三代软开发更新完将涨价

Button_21">自定义Button

大家有没有这样的场景,一个页面有很多个样式一致的Button,他们有很多内容都是相同的,如果我们去实现他,按照传统的方法,那就是复制、粘贴、粘贴、粘贴,是不是?

那么如果我们把这些共同的东西,抽象出来,整个一个基类呢,是不是就可以不用粘贴、粘贴、粘贴呢了。

在或者,我们需要的某些功能基础的Button不能满足呢,所以就有了自定义Button的需求了。目前我的代码里面有三个类型的Button,这里分享一下

第一类型-加声音

import QtQml 2.14 as Qml
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Private 1.0
import QtMultimedia 5.15
/**
  重写Button,主要为了按钮按下时有声音
  其次,这是第一代Qml Button,为了使用里面的样式和排他属性
  其他地方尽量使用新的Button
 */
Button
{
    id:root
    SoundEffect {
        id: playSound
        source: "qrc:/Audio/T_Resource/T_Audio/T_Base/buttonTach.wav"
    }
    onClicked: playSound.play()
}

这个是最简单了吧,就是一个正常的Button,我给他加了一个播放声音的选项,并且在按钮对应的Clicked事件中触发了声音的播放,这里为啥没有用MediaPlayer,咱们前面也说过了,提示应,用SoundEffect才是正确的路子。

第二类型-加样式

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtMultimedia 5.15
/**
 重写Button,主要为了按钮按下时有声音
*/
Button
{
    id:root
    font.pointSize: 14
    property string source: ""
    background: Rectangle{
        anchors.fill: parent
        color: root.checked ?  "#00FF00"  : (root.pressed ? "#FFB743" :"#44ADA5")
        Image {
            anchors.fill: parent
            source: root.source
        }
    }
    contentItem: Text {
        text: root.text
        font: root.font
        opacity: enabled ? 1.0 : 0.3
        color: root.checked ?  "#000000"  : (root.pressed ? "#000000" :"#FFFFFF")
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        elide: Text.ElideRight
    }

    SoundEffect {
        id: playSound
        source: "qrc:/Audio/T_Resource/T_Audio/T_Base/buttonTach.wav"
    }
    onClicked: playSound.play()
}

第二个版本,就是在第一个的版本上面加上了样式,说道样式,这里又不得不说百度了,这个问题大家可以百度到多个版本,但是那个是正确的,哪个是合理的,没有人给出解释,因为在当时的环境下就是合理的,这里我推荐大家还是直接看帮助文档,那是最合理的法子,那么我这里分享的仅仅是Qt 5.15.2 下Qt帮助文档中的法子,这个是基于Quick 2 的路子。

import QtQuick 2.12
import QtQuick.Controls 2.12

 Button {
     id: control
     text: qsTr("Button")

     contentItem: Text {
         text: control.text
         font: control.font
         opacity: enabled ? 1.0 : 0.3
         color: control.down ? "#17a81a" : "#21be2b"
         horizontalAlignment: Text.AlignHCenter
         verticalAlignment: Text.AlignVCenter
         elide: Text.ElideRight
     }

     background: Rectangle {
         implicitWidth: 100
         implicitHeight: 40
         opacity: enabled ? 1 : 0.3
         border.color: control.down ? "#17a81a" : "#21be2b"
         border.width: 1
         radius: 2
     }
 }

可对比下Quick 1 中的路子

 Button {
     text: "A button"
     style: ButtonStyle {
         background: Rectangle {
             implicitWidth: 100
             implicitHeight: 25
             border.width: control.activeFocus ? 2 : 1
             border.color: "#888"
             radius: 4
             gradient: Gradient {
                 GradientStop { position: 0 ; color: control.pressed ? "#ccc" : "#eee" }
                 GradientStop { position: 1 ; color: control.pressed ? "#aaa" : "#ccc" }
             }
         }
     }
 }

而我想说的是这两种路子在百度里面都有,但是却没有人告诉你为什么,你也好奇,为啥有的是style,有的却不是。

第三类型-减声音

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtMultimedia 5.15
/**
 重写Button,主要为了按钮按下时有声音
*/
Button
{
    id:root
    font.pointSize: 14
    property string source: ""
    background: Rectangle{
        anchors.fill: parent
        color: root.checked ?  "#00FF00"  : (root.pressed ? "#FFB743" :"#44ADA5")
        Image {
            anchors.fill: parent
            source: root.source
        }
    }
    contentItem: Text {
        text: root.text
        font: root.font
        opacity: enabled ? 1.0 : 0.3
        color: root.checked ?  "#000000"  : (root.pressed ? "#000000" :"#FFFFFF")
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        elide: Text.ElideRight
    }
}

第三种也很好理解,就是在第一种的基础上,把声音去掉。因为有的按钮不需要声音。

总结一下

这里我根据自己的需求,把按钮分成了3个类型的按钮,分别实现,同样,我也可以这些合成一种按钮,完了在内部通过属性区分,所以程序的世界里面真的是条条大路同罗马,就看那个更适合。没有最好,只有最适合。

存在一点小问题

大家看到,我在第一个类型和第二个类型中是有一个SoundEffect的模块的,如果我这么写会发生什么,嘿嘿,聪明的你是不是发现问题了,这个SoundEffect会伴随我的按钮的创建出一堆了,如果你碰巧用的也是ubuntu 系统开发,那可以到声音控制下面看看,是不是多出一堆音轨来,虽然在当下没有什么问题,不过我也不知道在未来会不会存在问题,也考虑使用一个指针,但是如果一个对象的话,那同时就只能播放一种声音了,所以,在当下,我认为他是合适的。后期随着需求再说。


博客签名2021

http://www.niftyadmin.cn/n/5114201.html

相关文章

永磁体的温度稳定性:剩磁温度系数、矫顽力温度系数、可逆温度系数

永磁体一般是作为磁场源,在一定的空间内来提供恒定磁场,对于一些精密的仪器仪表和磁性器件来说,磁体磁场的稳定性至关重要,它会直接影响仪器的精度和可靠性。 但是,在外界条件如:温度、时间、电磁场、机械…

OpenCV官方教程中文版 —— Canny 边缘检测

OpenCV官方教程中文版 —— Canny 边缘检测 前言一、原理1.噪声去除2.计算图像梯度3.非极大值抑制4.滞后阈值 二、OpenCV 中的 Canny 边界检测练习 前言 OpenCV 中的 Canny 边缘检测 • 了解 Canny 边缘检测的概念 • 学习函数 cv2.Canny() 一、原理 Canny 边缘检测是一种…

HarmonyOS音频开发指导:使用AVPlayer开发音频播放功能

如何选择音频播放开发方式 在HarmonyOS系统中,多种API都提供了音频播放开发的支持,不同的API适用于不同音频数据格式、音频资源来源、音频使用场景,甚至是不同开发语言。因此,选择合适的音频播放API,有助于降低开发工…

Tomcat调试端口被占用解决办法

Tomcat调试端口被占用解决办法 tomcat启动报错: Unable to open debugger port (127.0.0.1:52718): java.net.BindException "Address already in use: NET_Bind"这个错误表明Tomcat服务器在启动时尝试打开调试端口(通常是在调试模式下使用的…

软件外包开发的管理方法

软件开发的管理方法是确保项目按计划、高质量地交付的关键。以下是一些常见的软件开发管理方法,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 敏捷开发:敏捷开发是一种迭代和增量的开发方…

java获取时间相差多少天

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 获取时间差 背景一、使用步骤1.字符串转Date类型2.获取long类型,再比较大小 背景 比较两个时间相差的天数,判断逻辑 一、使用步骤 1.字符串转Date类…

电子企业MES管理系统体系架构与功能解析

随着科技的不断发展,电子企业对于生产过程的数字化需求日益增强。为了满足这一需求,许多企业开始引入MES(制造执行系统)来打造数字化车间,以改善车间的管理和生产等各环节。本文将详细介绍电子企业MES系统的体系架构和…

聚观早报 | OPPO Find N3首发;AI带来新红利

【聚观365】10月23日消息 OPPO Find N3首发 AI带来新红利 丰田展示EPU纯电皮卡 MIUI官微改名为“小米澎湃 OS” 沙特汽车工厂建立 OPPO Find N3首发 近日OPPO正式发布Find N3折叠旗舰,首发搭载获得国密二级认证的汇顶科技独立安全芯片GSEA0。得益于该芯片拥有…