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")
}
}
}
}
370

被折叠的 条评论
为什么被折叠?



