分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
在《Qt Quick 事件处理之信号与槽》中介绍了 QML 中如何使用内建类型的信号以及如何自定义信号,这次我们来看看如何处理鼠标、键盘、定时器等事件。这些时间在处理时,通常是通过信号来完成的。
鼠标事件处理
桌面开发的话,难免要处理鼠标事件……
变色矩形示例
看一个简单的处理鼠标事件的例子,先看代码(handle_mouse.qml):
import QtQuick 2.0import QtQuick.Controls 1.1Rectangle { width: 320; height: 240; MouseArea { anchors.fill: parent; acceptedButtons: Qt.LeftButton | Qt.RightButton; onClicked: { if(mouse.button == Qt.RightButton){ Qt.quit(); } else if(mouse.button == Qt.LeftButton){ color = Qt.rgba((mouse.x % 255) / 255.0 , (mouse.y % 255) / 255.0, 0.6, 1.0); } } onDoubleClicked: { color = "gray"; } }}
使用 "qmlscene handle_mouse.qml" 命令,可以看到运行效果。上面的代码仅仅是绘制一个矩形,当鼠标左键按下时改变矩形区域的颜色,鼠标右键按下时退出应用。图 1 是刚运行时的效果:
图1 handle_mouse.qml 初始运行效果
图 2 是点击鼠标左键后的效果:
图 2 鼠标左键点击后的效果
如果你点一下鼠标右键,程序会退出。
示例简陋,但足以说明如何处理鼠标事件,下面咱们慢慢来看。
MouseArea
MouseArea 对象可以附加到一个 item 上供 item 处理鼠标事件,它本身是一个不可见的 item 。在其内部,可以直接引用它所附着的对象的属性和方法。你可以将 MouseArea 理解为它所附着的 item 的代理。
MouseArea 有很多属性, enabled 用来控制是否处理鼠标事件,默认值是 true ,如果你设置为 false ,那么它所代理的 item 就会无视鼠标事件。 acceptedButtons 属性设定接收拿些个鼠标按键产生的事件(左键、右键、中键),示例代码 "acceptedButtons: Qt.LeftButton | Qt.RightButton;" 表示处理鼠标左键和右键。
作为一个 item , MouseArea 也拥有 anchors 属性,你可以使用它来描述有效的鼠标区域。示例代码 "anchors.fill: