qml Button 按钮

Button 按钮

在QML中,Button是一个非常常用的控件,
用于创建按钮,用户可以点击按钮来触发某些操作。
Button属于QtQuick.Controls模块,
提供了丰富的属性和信号,
使得开发者可以轻松地定制按钮的外观和行为。

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 640
    height: 480

    Button {
        text: "Click Me"
        onClicked: {
            console.log("Button clicked!")
        }
    }
}

常用属性
text: 按钮上显示的文本。
enabled: 控制按钮是否可用,默认为true。
pressed: 表示按钮是否被按下,只读属性。
hovered: 表示鼠标是否悬停在按钮上,只读属性。
flat: 如果设置为true,按钮将没有背景,默认为false。
icon.source: 设置按钮的图标,可以是图片路径或图标名称。
常用信号
onClicked: 当按钮被点击时触发。
onPressed: 当按钮被按下时触发。
onReleased: 当按钮被释放时触发。
onHoveredChanged: 当鼠标悬停状态改变时触发。

自定义外观

你可以通过修改Button的contentItem和background属性来自定义按钮的外观。

Button {
    text: "Custom Button"
    contentItem: Text {
        text: parent.text
        color: "white"
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
    }
    background: Rectangle {
        implicitWidth: 100
        implicitHeight: 40
        color: parent.pressed ? "darkblue" : (parent.hovered ? "blue" : "lightblue")
        radius: 5
    }
}

在QML中,Button控件的父类是AbstractButton。
AbstractButton是一个抽象基类,
提供了按钮控件的基本功能和接口,包括点击、按下、释放等事件的处理。

Button继承了AbstractButton的所有属性和方法,
并在此基础上添加了一些特定于按钮的属性和行为。

AbstractButton 的主要属性和方法
属性
checkable: 控制按钮是否可以被选中(切换状态),默认为false。
checked: 表示按钮是否被选中,只有在checkable为true时有效。
autoRepeat: 控制按钮是否自动重复触发点击事件,默认为false。
autoRepeatDelay: 自动重复触发点击事件的延迟时间,单位为毫秒。
autoRepeatInterval: 自动重复触发点击事件的时间间隔,单位为毫秒。
信号
clicked: 当按钮被点击时触发。
pressed: 当按钮被按下时触发。
released: 当按钮被释放时触发。
toggled: 当按钮的选中状态改变时触发。
方法
click(): 模拟按钮被点击。
toggle(): 切换按钮的选中状态。

各种按钮

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15

// 主应用程序窗口
ApplicationWindow {
    visible: true  // 窗口可见
    width: 800     // 窗口宽度
    height: 600    // 窗口高度
    title: "QML Button Showcase"  // 窗口标题

    // 垂直布局,用于排列各种按钮控件
    ColumnLayout {
        anchors.centerIn: parent  // 布局在父窗口中居中
        spacing: 20  // 控件之间的间距

        // 基本按钮
        Button {
            text: "Button"  // 按钮文本
            Layout.alignment: Qt.AlignCenter  // 在布局中居中对齐
            onClicked: console.log("Button clicked")  // 点击事件处理
        }

        // 工具按钮,通常用于工具栏
        ToolButton {
            icon.source: "qrc:/path/to/icon.png"  // 按钮图标
            Layout.alignment: Qt.AlignCenter  // 在布局中居中对齐
            onClicked: console.log("ToolButton clicked")  // 点击事件处理
        }

        // 圆形按钮
        RoundButton {
            text: "+"  // 按钮文本
            Layout.alignment: Qt.AlignCenter  // 在布局中居中对齐
            onClicked: console.log("RoundButton clicked")  // 点击事件处理
        }

        // 开关按钮,用于表示两种互斥的状态
        Switch {
            text: "Switch"  // 按钮文本
            Layout.alignment: Qt.AlignCenter  // 在布局中居中对齐
            onClicked: console.log("Switch state:", checked)  // 点击事件处理
        }
        // 延迟按钮,用于模拟网络请求
        DelayButton {
            width: 100  // 按钮宽度
            height: 50  // 按钮高度
            text: "DelayButton"  // 按钮文本
            Layout.alignment: Qt.AlignCenter  // 在布局中居中对齐
            delay: 2000  // 延迟时间,单位为毫秒
            onProgressChanged: console.log("DelayButton progress:", progress)  // 进度变化事件处理
        }
        // 复选框,用于表示二进制状态
        CheckBox {
            text: "CheckBox"  // 按钮文本
            Layout.alignment: Qt.AlignCenter  // 在布局中居中对齐
            onClicked: console.log("CheckBox state:", checked)  // 点击事件处理
        }

        // 单选按钮,用于表示一组互斥的选项
        RadioButton {
            text: "RadioButton"  // 按钮文本
            Layout.alignment: Qt.AlignCenter  // 在布局中居中对齐
            onClicked: console.log("RadioButton selected:", checked)  // 点击事件处理
        }

        // 旋钮按钮,用于调节数值
        Dial {
            value: 0.5  // 初始值
            Layout.alignment: Qt.AlignCenter  // 在布局中居中对齐
            onValueChanged: console.log("Dial value:", value)  // 值改变事件处理
        }

        // 数值输入框,带有上下箭头用于调整数值
        SpinBox {
            value: 50  // 初始值
            Layout.alignment: Qt.AlignCenter  // 在布局中居中对齐
            onValueChanged: console.log("SpinBox value:", value)  // 值改变事件处理
        }

        // 下拉列表按钮,用户可以从中选择一个选项
        ComboBox {
            model: ["Option 1", "Option 2", "Option 3"]  // 选项列表
            Layout.alignment: Qt.AlignCenter  // 在布局中居中对齐
            onCurrentIndexChanged: console.log("ComboBox selected:", currentText)  // 当前选项改变事件处理
        }

        // 自定义按钮,通过组合QML元素实现
        Rectangle {
            width: 100  // 按钮宽度
            height: 50  // 按钮高度
            color: mouseArea.pressed ? "darkblue" : "lightblue"  // 按钮背景颜色,根据按下状态变化
            radius: 5  // 按钮圆角
            Layout.alignment: Qt.AlignCenter  // 在布局中居中对齐

            // 按钮文本
            Text {
                text: "Custom Button"  // 文本内容
                color: "white"  // 文本颜色
                anchors.centerIn: parent  // 文本在按钮中居中对齐
            }

            // 鼠标区域,用于处理点击事件
            MouseArea {
                id: mouseArea
                anchors.fill: parent  // 填充父元素
                onClicked: console.log("Custom button clicked")  // 点击事件处理
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可能只会写BUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值