QML基本事件处理

14 篇文章 0 订阅
import QtQuick 2.0

Item {
    Rectangle {
        id: rect

        // MouseArea事件
        MouseArea {
            enabled: false// 设置为false,不再处理鼠标事件
            pressed:{} // 是否按住了鼠标按钮,可以实现在鼠标按下时执行一些操作
            containsMouse: {} // 当前是否有光标在MouseArea上,只有鼠标的按钮按下时才会被检测到
            onClicked: {
                // mouse.button 获取按下的按键
                // mouse.button取值有 Qt.LeftButton, Qt.RightButton, Qt.MiddleButton
                if (mouse.button === Qt.RightButton) {

                }
                // mouse.modifiers 获取按下的键盘修饰符等
                // Qt.NoModifier没有修饰键, Qt.ShiftModifier shift按键, Qt.ControlModifier Ctrl按键, Qt.AltModifier alt按键
                if (mouse.modifiers === Qt.ControlModifier) {

                }
            }
            onDoubleClicked: {}
            onPressed: {}
            hoverEnabled: true // 开启才能报告鼠标光标位置改变
            onPositionChanged: {}
            onEntered: {}
            onExited: {}
            // drag可以拖拽某个项目
            drag.target: rect  // 指定拖动项目的id
            // drag.active: 获取项目当前是否增在被拖动的信息
            // 拖拽方向
            // Drag.XAxis(水平方向)
            // Drag.YAxis(垂直方向)
            // Drag.XandYAxis(水平垂直方向)
            drag.axis: Drag.XAxis
            drag.minimumX: 0 // min和max限制项目在指定方向上拖拽的距离
            drag.maximumX: 1
        }
        // 当用户按下或释放一个按键时,会按以下步骤处理:
        // 第一步: Qt获取键盘动作并产生一个键盘事件
        // 第二步: 如果包含QDeclarativeView的Qt部件具有焦点,那么键盘事件会传递给它,否则将进行常规的按键处理
        // 第三步: 场景将键盘事件交付给具有活动焦点的QML项目。如果没有项目具有活动焦点,键盘事件会被忽略,然后继续常规的按键处理
        // 第四步: 如果具有活动焦点的QML项目接受了该键盘事件,那么传播将停止。否则,该事件会递归的传递到每一个项目的父项目
        // 第五步: 如果达到了跟项目,该键盘事件会被忽略而继续常规的Qt按键处理

        // Keys附加属性提供了基本的按键处理
        Keys.onPressed: {
            if (event.key === Qt.Key_A) {
                event.accepted = true
            }
        }
        // KeyNavigation可以用来实现使用方向键或tab键来进行项目导航
        // 属性有: backtab, tab, priority, down, left, right, up 等
        KeyNavigation.left: parent.left

        Text {
            // 一个项目是否具有活动焦点,可以通过Item.activeFocus属性进行查询
            text: activeFocus ? "have active foucus" : "do not have active foucus"
        }

        // FocusScope  指定焦点作用域
        FocusScope {
            x: rect12.x
            y: rect12.y
            width: rect12.width
            height: rect12.height
            Rectangle {
                id: rect12
                focus: true
            }
        }
    }

    // 定时器
    Timer {
        interval: 500
        running: true // false 停止定时器
        repeat: true // false 只触发一次
        onTriggered: time.text = Date().toString()
    }
    Text {
        id: time
        text: "timer"
    }
    Rectangle {
        //Loader 用来动态加载可见的QML组件,可以加载一个QML文件或一个组件对象
        Loader {id: pageLoader}
        MouseArea {
            onClicked: pageLoader.source = "pageq.qml"
        }
        // 任何从被加载的项目中发射的信号都可以使用Connections元素进行接收
        Connections {

        }
    }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值