Qt Quick事件处理

来源:互联网 发布:海南医学院怎么样知乎 编辑:程序博客网 时间:2024/06/08 19:18

  • MouseArea 鼠标句柄交互
    • 1MouseEvent鼠标事件
    • 2WheelEvent滚轮事件
    • 3DragEvent拖放事件
  • 键盘事件KeyEvent
    • 1导航键KeyNavigation
  • 定时器Timer

自己博客中的代码可以在https://github.com/xixihaha331/QT_Repository中获取
事件处理

MouseArea 鼠标句柄交互
MouseEvent鼠标事件
WheelEvent滚动事件
DrangEvent拖放事件
FocusScope 键盘焦点句柄
focus键盘事件
Flickable 提供一种浏览整张图片的一部分的效果,具体看例子
Flipable 提供一个平面,可以进行翻转看他的前面或后面,具体看例子
Timer定时器

1.MouseArea 鼠标句柄交互

属性:

enable;是否开启鼠标事件处理,默认为开启
pressed判断用户是否按住了鼠标按钮
onClicked 单击鼠标触发事件
onDoubleClicked双击鼠标触发事件
onPressed按下鼠标触发事件
onReleased松开鼠标触发事件
onPressaAndHold
onWheel处理滚轮事件

1.1MouseEvent鼠标事件

属性:

accepted属性为true来防止鼠标事件传播到下层项目
有一个mouse参数,对其进行操作判断
button/buttons获取按下的按键
button可取的值为:
Qt.LeftButton左键
Qt.RightButton右键
Qt.MiddleButton中键
modifiers获取按下的键盘修饰符
modifiers可取的值为:
Qt.NoModifier没有修饰键按下
Qt.ShiftModifier shift键按下
Qt.ControlModifier ctrl键按下
Qt.AltModifier alt键按下
Qt.MetaModifier meta键按下
Qt.KeypadModifier 一个小键盘按钮被按下
使用时需要将modifiers与这些特殊的按键进行按位与来判断按键
例如:mouse.modifiers & Qt.ShiftModifier

1.2WheelEvent滚轮事件

有一个wheel参数,对其进行操作判断
属性:

angleDelta来获取滚轮滚动的距离,x和y坐标分别保存水平,垂直方向的增量.
例如:wheel.angleDelta.y

1.3DragEvent拖放事件

属性:

drag

import QtQuick 2.8import QtQuick.Window 2.2 Window{    width: 800    height: 200   Rectangle{       id: rectangle1       width:100       height: 100       color: "green"       border.color: "green"       opacity: (800-rectangle1.x)/800       MouseArea{           anchors.fill: rectangle1           drag.target: rectangle1                       drag.axis: Drag.XAxis           onClicked: {               if(mouse.button == Qt.LeftButton){                   rectangle1.color = 'yellow'               }else if(mouse.button == Qt.RightButton){                   rectangle1.color = 'red'               }           }           onDoubleClicked: {                if((mouse.button == Qt.LeftButton) && (mouse.modifiers & Qt.ShiftModifier)){                    rectangle1.color = 'green'                    rectangle1.border.color = 'black'                }           }           onWheel: {               //anchors.fill:  rectangle1               if(wheel.modifiers & Qt.ControlModifier){                   if(wheel.angleDelta.y > 0){                       text.font.pointSize += 1                   }else if(wheel.angleDelta.y < 0){                       text.font.pointSize -= 1                   }               }           }       }   }   Text{       id: text       anchors.centerIn: rectangle1       text: "QT"   }}

2.键盘事件KeyEvent

属性:

focus设置为true,这个项目便会获得焦点
Keys属性来进行按键处理
Keys附加属性onPressed;onReleased提供了基本的处理
event.key获取了按下的按键
accepted判断是否接收按键
isAutoRepeat判断是否是自动重复按键

2.1导航键KeyNavigation

用来实现使用方向键或者Tab键进行项目导航
属性:

backtab(Shift+Tab);down;left;priority;right;tab;up

3.定时器Timer

属性:

interval设置时间间隔
repeat设置是否重复触发
running: true开启定时器
当定时器触发时,会执行onTriggered()信号处理器
Timer提供一系列函数start();stop();restart()

例子:倒计时

import QtQuick 2.8import QtQuick.Window 2.2import QtQuick.Controls 1.2Window{    width: 200    height: 200    QtObject {            id:attr;            property int counter;            Component.onCompleted: {                attr.counter = 10;            }        }    Text {        id: text        anchors.horizontalCenter: parent.horizontalCenter        anchors.bottom: button.top        text: qsTr("倒计时")        color: "blue"        font.pointSize: 20    }    Timer{        id: timer        interval: 1000        repeat: true        //running: true        triggeredOnStart: true;        onTriggered: {            text.text = attr.counter            attr.counter--              if(attr.counter < 0){                timer.stop()                text.text = 'stop'            }        }    }    Button{        id: button        anchors.centerIn: parent        text:qsTr("start")        onClicked: {            attr.counter = 10            timer.start();        }    }}
0 0
原创粉丝点击