QWidget到QML的过渡、区别、对应关系粗解(六)

QML界面的写法其实并不难,只是对应的界面的消息和处理代码页需要和C++进行

对比一下。

(1)QWidget的virtual void mousePressEvent(QMouseEvent* event) override 以及wheelEvent、mouseMoveEvent等等,在QML中编成了什么?

         Answer:  MouseArea

通常来讲,Mouse/Keyboard的动作都是对于可视区域(paintable)才有效的,在Qt Widgets中QWidget是Mouse/Keyboard处理的根类,基本上其他可视化类都是从这继承的(注意,但是严格说不对,可视化的基类是QPaintDevice)。同理,MouseArea基本上都是Item、Window、Dialog的继承类中进行使用。

MouseArea用法简单,前面也有例子,不再赘述。

(2)Keyboard的处理

在C++中,即重载keyPress时间即可。QML中使用Keys和它的参数KeyEvent 来进行附加处理。

例子如下:

import QtQuick

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Rectangle{
        id: rect
        width: 100
        height: 100
        color: "red"

        //注意,键盘输入需要设置这个
        Keys.enabled: true  // 不设置按键使能,获取不了按键事件
        focus: true         // 不设置焦点,获取不了键盘事件


        Keys.onReturnPressed: {
            enabled: true
            console.log("enterPressed");
        }
        Keys.onEscapePressed: {
            console.log("escPressed");
        }
        Keys.onPressed: function (keyEvent){
            console.log(keyEvent.key);

            if(keyEvent.modifiers & Qt.ShiftModifier)
                console.log("shift pressed")

            if(keyEvent.modifiers & Qt.ShiftModifier &&
                    keyEvent.modifiers & Qt.ControlModifier)
                console.log("both shift and control pressed")

            if(keyEvent.key === Qt.Key_F3){
                console.log("F3 pressed")
            }
        }
    }

}
 

      

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值