Qt基于Qml选择开关示例

 演示效果

切换开关组件实现QML

ToggleButton.qml

import QtQuick 2.12
 
Rectangle {
    id: root
    width: 80
    height: 26
    color: "#EAEAEA"
    radius: 13
 
    property string leftString
    property string rightString
    signal toggleLeft //左开关信号
    signal toggleRight //右开关信号
 
    Rectangle {
        id: rect
        width: parent.width * 0.6
        radius: parent.radius
        color: rect.state === "left"? "#FF00FF" : "#CCCCCC" //根据状态切换背景色
        state: "left"
        anchors {
            top: parent.top
            bottom: parent.bottom
        }
 
        states: [
            State {
                name: "right"
                PropertyChanges {
                    target: rect
                    x: root.width - rect.width
                }
            }
 
        ]
 
        transitions: [
            Transition {
                from: "*"
                to: "*"
                NumberAnimation { property: "x"; duration: 200 }
            }
        ]
 
        Text {
            id: label
            anchors.centerIn: parent
            text: rect.state === "left"? root.leftString : root.rightString
            color: "white"
            font.pointSize: 10
        }
    }
 
    MouseArea {
        anchors.fill: parent
        onPressed: {
            //点开切换状态
            if(rect.state === "left"){
                rect.state = "right";
                root.toggleRight();
            }else {
                rect.state = "left";
                root.toggleLeft();
            }
        }
    }
}

使用组件

main.qml

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
ApplicationWindow {
    visible: true
    width: 400
    height: 300
    title: qsTr("Qt基于Qml选择开关示例")
    Label{
        id: label
        anchors.bottom: qmlToggleButton.top
        anchors.horizontalCenter: parent.horizontalCenter
        height: 24
        width: contentWidth
    }
    ToggleButton{
        id: idToggleButton
        anchors.centerIn: parent
        height: 38
        width: 100
        leftString: qsTr("打开")
        rightString: qsTr("关闭")
        onToggleLeft: label.text = idToggleButton.leftString
        onToggleRight: label.text = idToggleButton.rightString
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值