当前位置: 首页 > article >正文

QML项目实战:自定义Button

目录

一.添加模块

​1.QtQuick.Controls 2.1

2.QtGraphicalEffects 1.12

二.自定义Button

1.颜色背景设置

2.设置渐变色背景

3.文本设置

4.点击设置

5.阴影设置

三.效果

1.当enabled为true

2.按钮被点击时

3.当enabled为false

四.代码


一.添加模块

1.QtQuick.Controls 2.1

  • QtQuick.Controls 提供了一组预定义的 UI 控件,这些控件可以用于构建现代、响应式的用户界面。
  • 它包括按钮、标签、文本框、滑块、列表视图等常见的 UI 元素。

2.QtGraphicalEffects 1.12

  • QtGraphicalEffects 提供了一组图形效果,可以在 QML 中应用到任何可视化项目上,如图像、视频或其他 UI 元素。
  • 它包括模糊、阴影、颜色调整、光照等效果。

二.自定义Button

1.颜色背景设置

2.设置渐变色背景

3.文本设置

4.点击设置

5.阴影设置

三.效果

1.当enabled为true

正常状态下按钮为深蓝色渐变浅蓝色

2.按钮被点击时

点击按钮状态下按钮为深紫色渐变浅紫色

3.当enabled为false

按钮为不可选中状态,按钮被置成灰色

四.代码

import QtQuick 2.15
import QtQuick.Window 2.2
import QtQuick.Controls 2.5
import QtGraphicalEffects 1.12

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

    //按钮颜色
    property color normalLeftColor: "#1A40FF"
    property color normalRightColor: "#5E8EFF"
    property color pressedLeftColor: "#6200E2"
    property color pressedRightColor: "#6B7DFF"
    property color disableLeftColor: "#8B99B2"
    property color disableRightColor: "#6D7B9A"

    function getLeftColor() {
        if (control.enabled) {
            return control.pressed ? pressedLeftColor : normalLeftColor;
        } else {
            return disableLeftColor;
        }
    }

    function getRightColor() {
        if (control.enabled) {
            return control.pressed ? pressedRightColor : normalRightColor;
        } else {
            return disableRightColor;
        }
    }

    //按钮点击增加数字
    property int   index: 0

    // 文本颜色。
    property color textColor: control.enabled ? "white" : "#C8D3E6"

    Button {
        id: control
        anchors.centerIn: parent
        implicitWidth: 180 // 默认是小按钮的宽高
        implicitHeight: 70
        font.family: "微软雅黑"
        font.pixelSize: 30
        enabled:true

        contentItem: Item {
            z: control.z + 1 // 避免含有图片时受shadow的影响而不显示
            anchors.fill: parent

            Text {
                anchors.centerIn: parent
                text: index
                color: textColor
                font.family: control.font.family
                font.pixelSize: control.font.pixelSize
            }
        }

        onClicked: {
            index++
        }

        // 渐变色背景。需要左侧颜色,右侧颜色。
        background: Rectangle {
            id:_background
            radius:10

            gradient: Gradient {
                orientation: Gradient.Horizontal
                GradientStop { position :0.0; color:getLeftColor() }
                GradientStop { position :1.0; color:getRightColor() }
            }
         }

         // 淡阴影(UI左上方照射的效果)
         DropShadow {
             id:_shadow
             anchors.fill:_background
             horizontalOffset :3
             verticalOffset :2
             radius :8.0
             samples :17
             color : control.enabled ?  "#00208B" : "#C8D3E6"
             source:_background
             visible:true
         }
     }
}


http://www.kler.cn/a/386159.html

相关文章:

  • redis linux 安装
  • 相机光学(四十四)——ALL-PD和PDAF
  • 使用 Prompt API 与您的对象聊天
  • Linux 实现自动登陆远程机器
  • 【快捷入门笔记】mysql基本操作大全-SQL表
  • Java I/O(输入/输出)——针对实习面试
  • Spring面试题之事务的传播行为
  • electron 中 ipcRendererEvent 作用
  • 面试总结!
  • spark的学习-03
  • YOLOv8相较于YOLOv5有哪些改进?
  • 滑动窗口最大值
  • 《手写Spring渐进式源码实践》实践笔记(第十七章 数据类型转换)
  • 布朗运动
  • 如何用全局事件总线实现组件间的通信
  • STM32标准库-待机模式
  • 数据集市是什么?有什么优势?
  • OpenGL学习笔记(三) 绘制图形
  • RabbitMQ 篇-深入了解 RabbitMQ 安装以及 SpringAMQP 的基础使用(声明队列和交换机、发送接收消息、配置 JSON 消息转化器)
  • 【Linux系列】利用 CURL 发送 POST 请求
  • Android13 系统/用户证书安装相关分析总结(二) 如何增加一个安装系统证书的接口
  • 网络协议都有哪些?
  • 软件工程技术专业在物联网应用开发中的关键技术与挑战
  • XSS详解
  • 【Rust设计模式之Fold模式】
  • Java 中的 Arrays.sort () 方法:排序的利器