QML快速入门

【Qt】QML快速入门1——语法:https://blog.csdn.net/See_Star/article/details/113729827
【Qt】QML快速入门2——基本元素:https://blog.csdn.net/See_Star/article/details/113730053
【Qt】QML快速入门3——组件:https://blog.csdn.net/See_Star/article/details/113730209
【Qt】QML快速入门4——简单转换:https://blog.csdn.net/See_Star/article/details/113736543
【Qt】QML快速入门5——定位元素:https://blog.csdn.net/See_Star/article/details/113737019
【Qt】QML快速入门6——布局元素:https://blog.csdn.net/See_Star/article/details/113737297
【Qt】QML快速入门7——输入元素:https://blog.csdn.net/See_Star/article/details/113737418


输入元素(Input Element)

我们已经使用过MouseArea(鼠标区域)作为鼠标输入元素。这里我们将更多的介绍关于键盘输入的一些东西。我们开始介绍文本编辑的元素:TextInput(文本输入)和TextEdit(文本编辑)。

目录

  • 1 文本输入(TextInput)
  • 2 焦点区域(FocusScope)
  • 3 文本编辑(TextEdit)
  • 4 按键元素(Key Element)

1 文本输入(TextInput)

文本输入允许用户输入一行文本。这个元素支持使用正则表达式验证器来限制输入和输入掩码的模式设置。

// textinput.qmlimport QtQuick 2.0Rectangle {width: 200height: 80color: "linen"TextInput {id: input1x: 8; y: 8width: 96; height: 20focus: truetext: "Text Input 1"}TextInput {id: input2x: 8; y: 36width: 96; height: 20text: "Text Input 2"}
}


用户可以通过点击TextInput来改变焦点。为了支持键盘改变焦点,我们可以使用KeyNavigation(按键向导)这个附加属性。

// textinput2.qmlimport QtQuick 2.0Rectangle {width: 200height: 80color: "linen"TextInput {id: input1x: 8; y: 8width: 96; height: 20focus: truetext: "Text Input 1"KeyNavigation.tab: input2}TextInput {id: input2x: 8; y: 36width: 96; height: 20text: "Text Input 2"KeyNavigation.tab: input1}
}

KeyNavigation(按键向导)附加属性可以预先设置一个元素id绑定切换焦点的按键。

一个文本输入元素(text input element)只显示一个闪烁符和已经输入的文本。用户需要一些可见的修饰来鉴别这是一个输入元素,例如一个简单的矩形框。当你放置一个TextInput(文本输入)在一个元素中时,你需要确保其它的元素能够访问它导出的大多数属性。

我们提取这一段代码作为我们自己的组件,称作TLineEditV1用来重复使用。

// TLineEditV1.qmlimport QtQuick 2.0Rectangle {width: 96; height: input.height + 8color: "lightsteelblue"border.color: "gray"property alias text: input.textproperty alias input: inputTextInput {id: inputanchors.fill: parentanchors.margins: 4focus: true}
}

注意:如果你想要完整的导出TextInput元素,你可以使用property alias input: input来导出这个元素。第一个input是属性名字,第二个input是元素id。

我们使用TLineEditV1组件重写了我们的KeyNavigation(按键向导)的例子。

Rectangle {...TLineEditV1 {id: input1...}TLineEditV1 {id: input2...}
}


尝试使用Tab按键来导航,你会发现焦点无法切换到input2上。这个例子中使用focus:true的方法不正确,这个问题是因为焦点被转移到input2元素时,包含TlineEditV1的顶部元素接收了这个焦点并且没有将焦点转发给TextInput(文本输入)。为了防止这个问题,QML提供了FocusScope(焦点区域)。

2 焦点区域(FocusScope)

一个焦点区域(focus scope)定义了如果焦点区域接收到焦点,它的最后一个使用focus:true的子元素接收焦点,它将会把焦点传递给最后申请焦点的子元素。我们创建了第二个版本的TLineEdit组件,称作TLineEditV2,使用焦点区域(focus scope)作为根元素。

// TLineEditV2.qmlimport QtQuick 2.0FocusScope {width: 96; height: input.height + 8Rectangle {anchors.fill: parentcolor: "lightsteelblue"border.color: "gray"}property alias text: input.textproperty alias input: inputTextInput {id: inputanchors.fill: parentanchors.margins: 4focus: true}
}

现在我们的例子将像下面这样:

    Rectangle {...TLineEditV2 {id: input1...}TLineEditV2 {id: input2...}}

按下Tab按键可以成功的在两个组件之间切换焦点,并且能够正确的将焦点锁定在组件内部的子元素中。

3 文本编辑(TextEdit)

文本编辑(TextEdit)元素与文本输入(TextInput)非常类似,它支持多行文本编辑。它不再支持文本输入的限制,但是提供了已绘制文本的大小查询(paintedHeight,paintedWidth)。我们也创建了一个我们自己的组件TTextEdit,可以编辑它的背景,使用focus scope(焦点区域)来更好的切换焦点。

// TTextEdit.qmlimport QtQuick 2.0FocusScope {width: 96; height: 96Rectangle {anchors.fill: parentcolor: "lightsteelblue"border.color: "gray"}property alias text: input.textproperty alias input: inputTextEdit {id: inputanchors.fill: parentanchors.margins: 4focus: true}
}

你可以像下面这样使用这个组件:

// textedit.qmlimport QtQuick 2.0Rectangle {width: 136height: 120color: "linen"TTextEdit {id: inputx: 8; y: 8width: 120; height: 104focus: truetext: "Text Edit"}
}

4 按键元素(Key Element)

附加属性key允许你基于某个按键的点击来执行代码。例如使用up,down按键来移动一个方块,left,right按键来旋转一个元素,plus,minus按键来缩放一个元素。

// keys.qmlimport QtQuick 2.0DarkSquare {width: 400; height: 200GreenSquare {id: squarex: 8; y: 8}focus: trueKeys.onLeftPressed: square.x -= 8Keys.onRightPressed: square.x += 8Keys.onUpPressed: square.y -= 8Keys.onDownPressed: square.y += 8Keys.onPressed: {switch(event.key) {case Qt.Key_Plus:square.scale += 0.2break;case Qt.Key_Minus:square.scale -= 0.2break;}}
}

【Qt】QML快速入门7——输入元素相关推荐

  1. QT Creator快速入门读书笔记:新建HelloWorld工程

    窗口部件 QMainWindow是带有菜单栏和工具栏的主窗口类,QDialog是各种对话框的基类,QWidget类是所有用户界面对象的基类,被称为基础窗口部件.QWidget继承自QObject类和Q ...

  2. QT Creator快速入门读书笔记:窗口部件初探

    QWidget基础窗口部件 Qt把没有嵌入到其他部件中的部件称为窗口,一般窗口都有边框和标题栏,就像程序中的widget和label一样.QMainWindow和大量的QDialog子类是最一般的窗口 ...

  3. Qt Creator快速入门(第3版)

    ​​​第1章Qt Creator简介 可以参考Qt开源社区(www.qter.org)  打开文件所在的文件夹: Ctrl+ Tab快捷键,可以在多个打开的文档切换 帮助里面的: 书签:Ctrl十 M ...

  4. Qt Designer快速入门

    Qt Designer快速入门 Qt Designer快速入门 Qt Designer快速入门 使用Qt Designer涉及四个基本步骤: 选择你的形式和对象 将对象放在表格上 将信号连接到插槽 预 ...

  5. 【Qt5开发】Qt Quick/QML快速入门视频教程

    learnqml 免费试看地址:https://jiaoyu.taobao.com/course/QKT_2081022 完整视频购买地址:https://item.taobao.com/item.h ...

  6. Hello Qt——QMake快速入门

    一.QMake简介 qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具. qmake是一个用来简化在不同平台间开发工程的构建过程的工具.qmake会自动生成Ma ...

  7. 《Qt Creator快速入门(第3版)》

    第1章Qt Creator简介 可以参考Qt开源社区(www.qter.org)  打开文件所在的文件夹: Ctrl+ Tab快捷键,可以在多个打开的文档切换 帮助里面的: 书签:Ctrl十 M 第2 ...

  8. 2-2:C++快速入门之输入和输出

    文章目录 (1)cout (2)cin 输出 Hello World是学习每个语言时的必备操作.上一篇文章所展示的C++输出似乎和C语言不太像.当然,你也可以使用 printf输出,因为C++兼容C语 ...

  9. matlab快速入门(1):输入命令

    本教程以任务的形式进行讲解. 任务(1):使用命令 3*5 将数值 3 和 5 相乘. 任务(2):将 3*5 的计算结果赋给一个名为 m 的变量 任务(3):MATLAB 中的等号 (=) 是赋值运 ...

最新文章

  1. GitHub 标星 2.5K+,U^2-Net 跨界肖像画,完美复刻人物细节!
  2. 如何利用 “集群流控” 保障微服务的稳定性?
  3. 策略模式和工厂模式的区别_java设计模式之状态模式,策略模式孪生兄弟
  4. Dalvik/ART(ANDROID)中的多线程机制(2)
  5. C++vector容器-互换容器
  6. h3c防火墙u200配置命令_h3c 防火墙清除配置
  7. 注意力机制学习(一)——通道注意力与pytorch案例
  8. ie运行不了java脚本界面_IE浏览器不能运行js JS代码失效不能运行了如何解决
  9. 技术大会值得参加吗?
  10. Biopython -- Parsing BLAST output
  11. 龙果开源支付系统 架构全新升级
  12. C语言—各种数据类型间的混合运算
  13. Android 客户端上开发人人客户端系列教程
  14. 泛函分析在计算机科学中的应用,泛函分析 - 重庆师范大学数学科学学院.doc
  15. ms office excel2013教程 - 套用表格样式
  16. 相亲app开发,解决内存循环引用的问题
  17. 一步一步做高性能服务器(C++) -- Day 0
  18. java微信公众号素材管理系统_微信公众平台后台素材管理
  19. 重器 :关键基础设施保护
  20. C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar

热门文章

  1. 如何写好科研论文(雨课堂)-期末考试答案
  2. css加简单的JavaScript做出毛玻璃效果
  3. GARCH-QR非线性回归(GQNR)交易模型(初稿)
  4. 局域网共享故障的分析与排除
  5. 【STM32篇】4988驱动步进电机
  6. 新手学画画,这5点必须牢记
  7. 【RAP】CAS PIA 快速浏览入口地址
  8. 2022/9/17——基于stm32mp157的按键中断实验
  9. xsser工具使用教程
  10. Mac系统下无法删除文件夹