自学内容网 自学内容网

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
         }
     }
}


原文地址:https://blog.csdn.net/qq_48597462/article/details/143507038

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!