QML- QML 响应用户输入

一、概述

Qt Quick模块支持最常见的用户输入类型,包括鼠标触摸事件、文本输入按键事件。其他模块也能支持其他类型的用户输入,例如 Qt Sensors 模块支持QML应用程序中的抖动手势,但是要有对应的硬件才能实现这样的功能。同时对于有关audio-visual 视听输入的信息,请参阅 Qt Multimedia 文档。

二、鼠标和触摸事件

QML应用程序可以处理鼠标和触摸事件。例如,你可以通过给图像添加一个TapHandler来创建按钮,或者给一个内部有文本对象的矩形添加一个TapHandler来创建按钮。TapHandler响应任何类型的指向设备上的点击或点击。

在这里插入图片描述
就比如下面这里点击就延长这个宽度

  import QtQuick 2.12

  Item {
    
    
      id: root

      width: 320
      height: 480

      Rectangle {
    
    
          color: "#272822"
          width: 320
          height: 480
      }

      Rectangle {
    
    
          id: rectangle
          x: 40
          y: 20
          width: 120
          height: 120
          color: "red"

          TapHandler {
    
    
              onTapped: rectangle.width += 10
          }
      }
  }

有关更高级的用例,如拖动、缩放和缩放手势,请参阅DragHandler和PinchHandler类型的文档。

注意::有些类型有自己内置的输入处理。例如,Flickable响应鼠标拖动和鼠标滚轮滚动。它通过合成的鼠标事件来处理触摸拖动和点击,这些鼠标事件是在触摸事件没有被处理时创建的。

三、键盘和按钮事件

无论是设备上的按钮、小键盘还是键盘上的按键,都可以使用 Keys attached 属性来处理。这个附加属性在所有 Item 派生类型上都可用,并与 Item::focus 属性一起确定哪个类型接收到 key 事件。对于简单的键处理,可以将单个元素的焦点设置为true,并在那里进行所有的键处理。

在这里插入图片描述
就比如下面这个使用键盘 左右、上下键移动红色的框框。

 import QtQuick 2.3

  Item {
    
    
      id: root

      width: 320
      height: 480

      Rectangle {
    
    
          color: "green"
          width: 320
          height: 480
      }

      Rectangle {
    
    
          id: rectangle
          x: 40
          y: 20
          width: 120
          height: 120
          color: "red"

          focus: true
          Keys.onUpPressed: rectangle.y -= 10
          Keys.onDownPressed: rectangle.y += 10
          Keys.onLeftPressed: rectangle.x += 10
          Keys.onRightPressed: rectangle.x -= 10
      }
  }

对于文本输入,我们有几种QML类型可供选择。TextInput提供了一个无样式的单行可编辑文本,而TextField更适合应用程序中的表单字段。TextEdit可以处理多行可编辑文本,但TextArea是一个更好的选择,因为它增加了样式。
下面的代码片段演示了如何在应用程序中使用这些类型:

在这里插入图片描述

  import QtQuick 2.12
  import QtQuick.Controls 2.4
  import QtQuick.Layouts 1.3

  ApplicationWindow {
    
    
      width: 300
      height: 200
      visible: true

      ColumnLayout {
    
    
          anchors.fill: parent
          TextField {
    
    
              id: singleline
              text: "Initial Text"
              Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
              Layout.margins: 5
              background: Rectangle {
    
    
                 implicitWidth: 200
                 implicitHeight: 40
                 border.color: singleline.focus ? "#21be2b" : "lightgray"
                 color: singleline.focus ? "lightgray" : "transparent"
              }
          }

          TextArea {
    
    
              id: multiline
              placeholderText: "Initial text\n...\n...\n"
              Layout.alignment: Qt.AlignLeft
              Layout.fillWidth: true
              Layout.fillHeight: true
              Layout.margins: 5
              background: Rectangle {
    
    
                 implicitWidth: 200
                 implicitHeight: 100
                 border.color: multiline.focus ? "#21be2b" : "lightgray"
                 color: multiline.focus ? "lightgray" : "transparent"
              }
          }
      }
  }

猜你喜欢

转载自blog.csdn.net/qq_43680827/article/details/129701493
QML