- 浏览: 3445223 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
sonichy:
Qt5改动很多,要改改了。
基于QItemDelegate的例子1 SpinBoxDelegate -
我的主页6:
楼主,2.2子查询的分页方式:SELECT * FROM ar ...
Mysql 分页语句Limit用法 -
liguoqi:
非常感谢楼主的用心指导,工具以及图片例子都提供了 赞!
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
问下这个图片怎么解压损坏呀
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
楼主讲解的非常详细,还附带工具和图片例子,非常感谢
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载
QML入门教程(1)
QML是什么?
QML是一种描述性的脚本语言,文件格式以.qml结尾。语法格式非常像CSS(参考后文具体例子),但又支持javacript形式的编程控制。它结合了QtDesigner UI和QtScript的优点。QtDesigner可以设计出.ui界面文件,但是不支持和Qt原生C++代码的交互。QtScript可以和Qt原生代码进行交互,但是有一个缺点,如果要在脚本中创建一个继承于QObject的图形对象非常不方便,只能在Qt代码中创建图形对象,然后从 QtScript中进行访问。而QML可以在脚本里创建图形对象,并且支持各种图形特效,以及状态机等,同时又能跟Qt写的C++代码进行方便的交互,使用起来非常方便。
在Qt C++文件中通过QDeclarativeView加载,就像使用UiLoader加载.ui文件一样。不过本文不会去介绍如何在Qt C++中使用QML,而是把重点放在QML的语法上,不过别担心看不到.qml文件的效果。Qt提供了一个工具QML Viewer可以查看.qml文件生成的效果,该程序在Qt的bin目录下,应用名字叫qml(Windows下叫qml.exe)。所以你在看到别人提供的.qml文件时,你可以用下面命令qml filename.qml 查看.qml的执行结果,咱们的第一个Hello,World生成界面如下
开始QML吧
上面的Hello,World源代码如下
import QtQuick 1.0 Rectangle { id: page width: 500; height: 200 color: "lightgray" Text { id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true } }
第1行是Qt QML的统一用法,指明当前QML会使用Qt-4.7里已经定义好的类型,比如第3行的Rectangle和第8行的Text。
第3行开始至文章结束处则定义了一个矩形的图形区域对象,第4行则申明了该矩形区域对象的id为”page”可以被其它对象识别并通过该id访问其成员属性,另外几个属性width/height/color则很好理解,语法跟CSS类似,可以写在一行中用分号”;”隔开。
第8行至第12行则是一个文本对象,看它代码的嵌套结构可以知道它是内嵌于Rectangle的。Text的属性除了anchors其它几个都能顾名思义。anchors描诉的是当前对象的位置和其它对象的相对关系,这里看到其水平中心位置在“page“的水平中心位置。如果想对anchors了解更多,请参考锚的解释。
以上就是Hello,World的全部代码,将其存为hellowordl.qml,那么只要执行qml hellowrold.qml就能看到文章前头的界面了。
更多对象?
在上面的代码中我们用到了Rectangle和Text,那么我还有哪些对象以及这些对象有哪些属性呢。那么请访问QML-Item类,Item类是QML最基础的类,通过查看它的继承类以及这些继承类可用的属性,你可以添加更多你感兴趣的内容。
QML入门教程(2)
在上一篇文章里我们使用了最基础的QML类型实现了文字Hello,World的显示。这篇文章中将会增加颜色选项面板,用户可以给 Hello,World设置不同的颜色,如下图显示
QML组件
从图中可以看到选项面板由6个颜色小块组成,它们唯一的区别就是颜色不一样。那么我们就可以用组件(Component)来实现一个颜色块,然后在需要的时候使用这个组件就可以了。组件其实和其它编程语言中的宏,函数,类,结构体等功能差不多,就是代码复用。作为程序员,我知道你懂的。组件由一个单独的QML文件名组成,文件名总是以大写字母开头,要使用该组件的时候直接使用该文件名就可以了。关于如何定义自己的组件,请访问 Defining new Components。我们为一个颜色块定义了一个Cell.qml文件,然后使用Cell作为一个去访问它。
Cell.qml的内容
import QtQuick 1.0 Item { id: container property alias cellColor: rectangle.color signal clicked(color cellColor) width: 40; height: 25 Rectangle { id: rectangle border.color: "white" anchors.fill: parent } MouseArea { anchors.fill: parent onClicked: container.clicked(container.cellColor) } }
挨个看代码~
Item { id: container property alias cellColor: rectangle.color signal clicked(color cellColor) width: 40; height: 25
Item是最常使用的QML类型,一般用作其它类型的容器,可以理解成最顶级的父类,功能类似于QtGui中的QWidget。用一个属性别名访问其内嵌对象rectangle的color属性。在其它文件中可以用Cell对象的cellColor获得rectangle的color值。 signal clicked(color cellColor)则为对象定义了一个信号,在代码的其它部分可以发出这个信号。
Rectangle { id: rectangle border.color: "white" anchors.fill: parent }
这一部分没有特别好说的,在Item中内嵌了一个id为rectangle白边框的矩形区域,大小占满整个Item。
MouseArea { anchors.fill: parent onClicked: container.clicked(container.cellColor) }
MouseArea则为Item增加了一块鼠标响应区,看它的anchors知道,在整个Item区域内都是鼠标活动区,都能侦听到鼠标事件。 onClicked那一行则相当于为鼠标单击事件增加了一个处理行为,这里是发出了一个clicked()的信号。这个信号正是我们在Item里定义的那 个signal。 Cell.qml写完了,再来看看程序的主文件。
main.qml的内容
import QtQuick 1.0 Rectangle { id: page width: 500; height: 200 color: "lightgray" Text { id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true } Grid { id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 rows: 2; columns: 3; spacing: 3 Cell { cellColor: "red"; onClicked: helloText.color = cellColor } Cell { cellColor: "green"; onClicked: helloText.color = cellColor } Cell { cellColor: "blue"; onClicked: helloText.color = cellColor } Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor } Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor } Cell { cellColor: "black"; onClicked: helloText.color = cellColor } } }
这里在原来的基础上增加了一个Grid网格。x坐标是4,底部挨着page的底部,所以我们看到的是在左下角。新增的6个Cell,名字和Cell.qml是一样的。通过cellColor属性将颜色传给了每个颜色块。当Cell接收到onClicked事件的时候,关联的代码回去修改Hello,World上的颜色。细心的朋友可能会注意到Cell只是定义了 clicked()的信号,并没有定义onClicked()啊,是的这就是Component的语法规则了。如果你在Cell.qml里定义的是 clicked(),那么你在main.qml中引用的时候就该用onClicked()了。
QML入门教程(3)
经过前面两个教程,文字也能显示,也能处理鼠标事件了,来点动画吧.
这个教程实现了当鼠标按住的时候,Hello,World从顶部到底部的一个旋转过程,并带有颜色渐变的效果。
完整的源代码main.qml
import QtQuick 1.0
Rectangle { id: page width: 500; height: 200 color: "lightgray" Text { id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true MouseArea { id: mouseArea; anchors.fill: parent } states: State { name: "down"; when: mouseArea.pressed == true PropertyChanges { target: helloText; y: 160; rotation: 180; color: "red" } } transitions: Transition { from: ""; to: "down"; reversible: true ParallelAnimation { NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad } ColorAnimation { duration: 500 } } } } Grid { id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 rows: 2; columns: 3; spacing: 3 Cell { cellColor: "red"; onClicked: helloText.color = cellColor } Cell { cellColor: "green"; onClicked: helloText.color = cellColor } Cell { cellColor: "blue"; onClicked: helloText.color = cellColor } Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor } Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor } Cell { cellColor: "black"; onClicked: helloText.color = cellColor } } }
除了这个main.qml之外,还有一个Cell.qml也是需要的,和教程(2)中的完全一样。下面来看一看比起教程(2)的代码增加出来的内容。
Text { .... states: State { name: "down"; when: mouseArea.pressed == true PropertyChanges { target: helloText; y: 160; rotation: 180; color: "red" } } transitions: Transition { from: ""; to: "down"; reversible: true ParallelAnimation { NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad } ColorAnimation { duration: 500 } } } .....
tates内嵌于Text之中,可以为Text元素添加多个状态,现在的这个例子只增加了一个状态。该状态的名为为”down”,然后由“when”指
定了什么时候触发这个状态。PropertyChanges则指定了哪个元素的哪些属性会发生什么样的变化。例子中PropertyChanges利用 “target”指定了id为”helloText”的元素会发生变化,包括其y,rotation,color等属性。
transitions 是用于增加动画效果的(如果把transitions这一段代码删去,Hello,World的文字也会发生变化,但是看不到中间动画渐变效果)。同样可
以看到transitions是复数形式,意味着可以添加多个动画过程。“from”和”to”指明了当前的动画作用于哪两个状态变化之间。 “from”和”to”的参数名来自于State中的”name”属性。
ParalleAnimation则指定了有多个
有多个动画并行发生。NumberAnimation用于qreal类型的属性变化,ColorAnimation则用于颜色变化。更多 Animation请在QML文档中查找”Animation and Transitions”。
More Information, please refer to to:
QML Tutorial 2 - QML Components
QML Tutorial 3 - States and Transitions
发表评论
-
Qt官网变更【2012】
2012-09-21 19:30 4213Qt最近被Digia完全收购,诺基亚这两年的不理不睬,没有魄力 ... -
【转】QT实现不规则窗体
2012-09-21 18:50 4991看到好文章,收藏一下: 看到网上有很多不规则窗体的实现 ... -
Qt应用程序如何使用DCMTK类库进行二次开发DICOM数据传输
2012-09-13 09:35 0参考文章: 1、Using DCMTK with ... -
【转】将QT开发的界面程序封装成DLL,在VC中成功调用
2012-09-11 10:33 21119最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后 ... -
诺基亚挥别Qt,转手给Digia
2012-09-11 09:37 2858一家总部位于芬兰的IT业务供应商Digia今天宣布,已经签署了 ... -
Qt多线程间信号槽传递非QObject类型对象的参数
2012-09-07 15:29 21377一、以前就发现过这个问题: 在Qt项目中,有时候为了 ... -
QT样式表(QStyleSheet)
2012-08-17 10:37 17894QT样式表 (QStyleSheet) 作者:刘旭晖 ... -
FinalData磁盘文件恢复工具(绿色破解版)
2012-08-02 13:28 8586FinalData磁盘文件恢复工具(绿色破解版),使用起来很方 ... -
Eclipse Qt开发环境的建立【转】
2012-08-01 11:15 43771.下载Eclipse目前Eclipse+CDT已经可以 ... -
汽车辐射监测系统-Qt开发
2012-07-25 16:18 4693最近晚上抽空忙了两个月,才把一个小系统做完。虽然做的不是太完 ... -
Qt做发布版,解决声音和图片、中文字体乱码问题
2012-07-14 16:02 4864Qt做发布版,解决声音和图片、中文字体乱码问题 ... -
QTableView使用中的疑问,如何及时显示操作Model后的结果?
2012-06-01 14:52 0最终的解决方法:我正 ... -
【转】Qt QTableview使用
2012-06-01 09:49 9675QTableWidget是QT程序中常用的显示数 ... -
QTableView双击 单机事件信号
2012-06-01 09:47 23101双击QTableView的行,获取该行数据 代码 ... -
QMessageBox改变大小
2012-05-31 15:33 8445创建一个QMessageBox: QMessageBo ... -
更新QTableView中的进度条状态
2012-05-30 14:37 14859前段时间,我接触了,如何在一个QTableView中加入一个控 ... -
QThread 线程暂停 停止功能的实现
2012-05-29 11:56 12201为了实现Qt中线程的暂停运行,和停止运行的控制功能 需要在设 ... -
QT环境变量
2012-05-28 18:53 5593不知道为啥同事有台电脑,装完Qt-VS2008库,和VS Ad ... -
广告光
2012-05-24 18:33 0盈创广告联盟 http://www.yo114.cn/ ... -
Test
2012-05-24 18:22 2188Test<IMG SRC="cf08e32c2 ...
相关推荐
总之,"QML学习资料包"为学习者提供了一个全面了解和掌握QML、QT以及QML与C++交互的宝贵资源库。通过深入学习和实践,开发者能够利用这些工具和知识创建出功能强大、用户体验优秀的跨平台应用程序。
QML(Qt Modeling Language)是一种用于创建用户界面的声明性标记语言,由Qt框架提供支持。它非常适合开发流畅的动态用户界面,尤其适用于移动设备和嵌入式系统。由于其声明性质,QML允许开发者以一种直观的方式描述...
QML(Qt Meta Language)是Qt框架的一部分,用于构建用户界面和图形应用程序。它是一种声明性的语言,允许开发者以简洁的方式定义用户界面的结构、样式和行为。在"QML例子 QML资料 QML学习"这个主题中,我们主要探讨...
《QmlBook》学习中文Pdf版是一本针对Qml初学者的入门书籍,它涵盖了Qml编程语言的基础知识和相关技术的使用方法。本书不仅适合初学者,也适合希望进一步了解Qml技术的专业开发者。本书通过系统的章节布局,从最基础...
本文将深入探讨`QML`(Qt Meta Language)的学习与实践,以一个基于`Qt5`的抽奖程序为例,讲解如何利用`QML`和`QtQuick`来创建交互式用户界面。`QML`是`Qt`框架的一部分,它提供了一种声明式的语言来构建动态、富...
QML学习手册提供了一个全面的指南,涵盖了从基础入门到高级应用的各个方面。 手册的第一部分是基础入门,这部分内容适合初次接触QML的开发者。介绍部分强调了Qt5的重要性,提供了Qt5的概述,并介绍Qt的基本构建模块...
通过本教程的学习,开发者将能够掌握QML的基础知识,并能够使用QML的高级特性来构建功能丰富、界面美观的跨平台应用程序。同时,本教程将为开发者提供足够的信息和资源,以利用Qt的强大生态系统进一步探索和扩展QML...
总结起来,QmlPlugin.7z这个资源是一个关于如何在Qml中使用和创建插件的学习材料,涵盖了从C++到Qml的功能集成。通过学习和实践,开发者可以提升Qml应用程序的功能性和性能,实现更丰富的用户体验。
QML,全称为Qt Meta Language,是Qt框架的一部分,用于构建具有丰富图形用户界面的应用程序。它是基于Declarative编程模型的,允许开发者通过声明式语法来定义UI元素及其行为,使得界面设计变得直观且高效。这篇QML...
QT5 QMLbook学习手册是一本专注于QT5框架下QML技术的教程,旨在帮助开发者深入理解和掌握QML这一强大的用户界面(UI)设计语言。QML是Qt Quick的脚本语言,它允许以声明性的方式创建现代、动态且响应迅速的图形用户...
很多学QT的QML部分的同学说英文版源码很难下载,现在我把源码下载下来和大家一起共享,英文版qt5_cadaques和中文版QmlBook-In-Chinese的PDF也都包含在资源里。大家可以对照学习。此资源仅供学习使用,如有侵权,请...
QML,全称为Qt Meta Language,是Qt框架中用于描述用户界面的一种声明式语言。它允许开发者通过简洁、直观的语法来定义UI组件及其行为,同时结合JavaScript进行更复杂的逻辑处理。QML的优势在于它的易读性、灵活性...
《QmlBook-In-Chinese.rar》是一个包含了QML中文教程的压缩文件,旨在为刚开始学习QML的开发者提供详尽的指导和参考资料。QML,全称Qt Meta Language,是Qt框架下的一个强大的用户界面(UI)描述语言,用于创建优雅...
在本文中,我们将深入探讨如何使用Qt Quick QML(一种声明式用户界面设计语言)来实现虚线效果,特别关注...在提供的压缩包文件中,`qmlPc`可能包含了实现这一功能的源代码和示例,可以作为进一步学习和实践的参考。
QmlBook是一本全面介绍Qml技术的资源,提供了中文和英文两种版本,便于不同语言背景的学习者理解。书中不仅涵盖了理论知识,还包含了所有的源码文件,使得读者可以边学边练,加深对Qml编程的理解。 QmlBook的中文版...
在“QML ComboBox Demo”中,我们可以通过以下几个方面来了解和学习这个组件: 1. **基本使用**: ComboBox的基础用法是声明一个组合框并设置其`model`属性,`model`通常是一个ListModel,它包含要显示的选项。...
【使用QML实现的一个音乐播放器】是一个基于Qt框架的轻量级音乐播放软件,它利用了QML(Qt Quick)技术来构建用户界面。QML是一种声明式语言,允许开发者以直观的方式定义UI元素,并结合JavaScript进行逻辑处理。这...
通过研究这些文件,开发者可以学习到如何创建自定义的QML日历控件,包括但不限于日期选择、事件处理、样式定制以及与其他QML组件的交互。这种控件在日程管理、计划应用或者任何需要日期选择的场景中都极具实用性。 ...
QT5 QML系统学习文档是面向初学者的中文教程,旨在帮助那些对QT框架基础知识较为薄弱的学员快速掌握QML这一强大的用户界面设计语言。QML(Qt Meta Language)是Qt框架的一部分,它允许开发者使用声明式语法来设计...