QML- QML 响应用户输入_qmlshurukun-程序员宅基地

技术标签: qml  用户输入  鼠标事件  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"
              }
          }
      }
  }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43680827/article/details/129701493

智能推荐

方法论之新公司入职准备步骤-程序员宅基地

文章浏览阅读347次。2019.06.06从职业生涯的第二家公司离职,因为第二家公司是行业内的世界第一,世界500强,学到的东西很多,公司氛围,同事之间的关系也比较简单,收获满满。当时离职被卡满满30天,最后一天还帮忙调试程序,然后下一个工作日就直接新的公司入职了。第三家公司算是中型公司,全球职工千人+。入职第三天开始做项目,节奏有点赶,第一个周末就加班调试。因为没有做好入职准备,刚开始还是比较被动的。重要的事还提前做...

shutil 用法-程序员宅基地

文章浏览阅读776次,点赞2次,收藏2次。https://www.mihaoyun.comhttps://www.jb51.net/article/211773.htm

使用IDEA学习java基础语法_用idea讲java-程序员宅基地

文章浏览阅读892次,点赞2次,收藏9次。开始使用IDEA创建java工程,两种方法 直接创建java工程 然后一路next,只需要修改工程名和路径即可 先新创建一个空项目,一路next后再选择Moudle创建java模块,如图 然后进行项目结构的配置,将图中两个位置进行设置 然后按照正常步骤即可 常使用的快捷键 快速复制一行ctrl+d 快速删除一行ctrl+y java的基础语法1.注释 ..._用idea讲java

el-button 显示与禁用_el-button禁用-程序员宅基地

文章浏览阅读8.4k次。el-button 的显示与隐藏iconfont 的引用_el-button禁用

STL-map按value排序_std::map 按value排序-程序员宅基地

文章浏览阅读953次。方法1 将pair存入vector排序在map中存储 <key, value> 键值对的数据结构是pair,简单直接的想法是将map中的pair复制一份存储到vector中,并重写compare函数根据second元素排序,就可以使用sort对该vector进行排序。代码实现#include <iostream>#include <algorithm>#include <string>#include <map>#include &l_std::map 按value排序

python列表中两个元素,多个元素进行位置互换,列表排序_change_list()-程序员宅基地

文章浏览阅读1.3w次,点赞7次,收藏18次。两个元素位置互换change_list = [6, 8]print(change_list)# 交换列表,以下两个均可# change_list[0], change_list[1] = change_list[1], change_list[0]change_list[1], change_list[0] = change_list[0], change_list[1] pri..._change_list()

随便推点

Linux.安装node.js和npm的14.15.1版本的解决方案_node14.15.1-程序员宅基地

文章浏览阅读2.9k次。Linux.安装node.js和npm的14.15.1版本的解决方案linux,安装node 和npm1,首先登陆linux 创建一个目录2,下载node安装包,这里我们下载的是14.15.1版本3,下载好之后,进行解压4,建立软连接5,可以查看npm版本了6,如果自己之前下载过,而且不好使的话可以把之前下载的删掉如果第一次操作的话到第5步就可以结束了,如果不是第一次操作的话就要看看第6步linux,安装node 和npm我也是刚刚在学linux,想着把Vue部署到linux上,然后遇到了安装的问题,所_node14.15.1

描述 HTML、CSS、DOM、JavaScript分别表示的含义-程序员宅基地

文章浏览阅读1.7k次,点赞6次,收藏5次。文章目录1. 请描述 HTML、CSS、DOM、JavaScript分别表示的含义① HTML② CSS③ DOM④ JavaScript2. 请列举出 HTML 常用的标记。(至少10个)1. 请描述 HTML、CSS、DOM、JavaScript分别表示的含义① HTMLHTML,英文全称 Hyper Text Markup Language,翻译过来就是**①超文本②标记语言**,这是一种用于创建网页的标准标记语言。超文本:超文本就是用超链接的方法,将各种不同空间的文字信息组织在一起的

用DW制作简易的计算器_dw做加减乘除取余代码-程序员宅基地

文章浏览阅读2.3k次。用DW敲出一个简易的计算器学JS之前感觉有点难,然后学了JS感觉很简单只要有了思路就可以敲出来。下面是敲完之后的样子_dw做加减乘除取余代码

CTL控制文件的小感悟-程序员宅基地

文章浏览阅读5.5k次,点赞2次,收藏2次。ctl文件主要使用场景是sqlload加载外部的csv文件时,用来控制格式,也就是说,ctl中的字段要完全跟csv文件中的对应起来. 这个时候会有个问题,当要入库的数据库中的字段和csv不一致的时候,这时候就要在ctl文件中使用一个FILTER的属性来设置让其不检查这个字段. 当ctl文件中有中文的时候,这个时候最好使用GBK的编码格式来避免 sqlload在加载这个csv文件的_ctl控制文件

linux服务器启动、关闭、重启命令_服务器关机命令-程序员宅基地

文章浏览阅读1.5w次,点赞5次,收藏69次。关机命令:1、halt 立刻关机2、poweroff 立刻关机3、shutdown -h now 立刻关机(root用户使用)4、shutdown -h 10 10分钟后自动关机 如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启5、init0 停机或者关机重启命令:1、reboot 立即重启2、shutdown -r now 立刻重启(root用户使用)3、shutdown -r 10 过10分钟自动重启(root用户使用)4、init6 重启....._服务器关机命令

ubuntu查看内存使用情况_ubuntu查看内存占用情况-程序员宅基地

文章浏览阅读1.6w次,点赞7次,收藏47次。2.2弹出资源管理器,如下图所示。total:总物理内存大小。free:剩余可用内存。used:内存使用量。2.1打开终端,输入。_ubuntu查看内存占用情况

推荐文章

热门文章

相关标签