前言我们在第一篇教程的时候给大家讲过本系列教程会采用Qt Quick方式进行开发,那么Qt Quick是什么呢?本篇文章带大家简单来了解一下。Qt Quick简单认识要了解一个技术,相信官网是最好的去处,所以我们看一下官网对于Qt Quick的介绍,Qt Quick,不过这个介绍界面的最后编辑时间是15年,所以可能会有点不是很准确了,但是没有在官网找到最新的介绍,下面引用一部分主要内容的翻译:Qt Quick提供了一种称为QML(Qt元对象语言)的声明性语言,用于UI的设计和实现。QML基于CSS和JavaScript。QML代码的大部分内容只是CSS样式的名称和值属性对(例如,color:“ red”)。其余部分的内容通常是行为部分,例如对鼠标单击的响应,都是用JavaScript编写的。对于Qt 、C ++ 、C和Java开发人员而言,因为QML与CSS和JavaScript的相似性以及其简单性,所以QML易于被采用。另外虽然它很简单,但是Qt Quick使得编写苹果iPhone普及的流畅UI变得很容易。
简单来讲,就是使用Qt Quick来开发应用程序会变得更加简单,我们可以使用QML这种声明式语言来快速实现我们的UI部分,这就跟我们的网站开发一样前端使用QML来开发,然后后端用C++来开发,这样就可以在很大程度上来缩短软件的开发时间,Qt Quick首次发布时间是2010年,当时的Qt版本是4.7,相信这么多年过去Qt Quick各方面肯定都更加完善了。 QML(Qt Meta-object Language)简单了解貌似没在官网找到关于QML的介绍,那么给大家看一下QML的百度百科吧:QML是一种描述性的脚本语言,文件格式以.qml结尾。语法格式非常像CSS(参考后文具体例子),但又支持javascript形式的编程控制。QtDesigner可以设计出·ui界面文件,但是不支持和Qt原生 C++ 代码的交互。QtScript可以和Qt原生代码进行交互,但是有一个缺点,如果要在脚本中创建一个继承于QObject的图形对象非常不方便,只能在Qt代码中创建图形对象,然后从QtScript中进行访问。而QML可以在脚本里创建图形对象,并且支持各种图形特效,以及状态机等,同时又能跟Qt写的C++代码进行方便的交互,使用起来非常方便。
就像上面讲的,QML兼具了UI界面文件和QtScript的有点,非常方便的将界面设计和与C++交互融化在了一起,这是Qt Quick最重要的特性,可以让我们以最便捷的方式去开发应用。 Qt Quick简单示例我们通过一个简单的Hello World示例来看一下,QML有多方便,先上代码,本节课不讲工程如何创建,只简单看一下qml文件。02 | import QtQuick.Window 2.12 |
08 | title: qsTr( "Hello World" ) |
11 | text: qsTr( "Hello World" ) |
12 | anchors.centerIn: parent |
大家猜一猜上面的代码完成了哪些操作呢?大家要是觉得还是非常麻烦的话,可以跟下面的代码做一下对比,下面的代码是Qt Widgets中专门处理界面的代码,也就是我们常说的.ui文件,编写语言是XML,当然可以用设计师模式来通过图形界面编写: 01 | <?xml version= "1.0" encoding= "UTF-8" ?> |
03 | < class >MainWindow</ class > |
04 | <widget class = "QMainWindow" name= "MainWindow" > |
05 | <property name= "geometry" > |
13 | <property name= "windowTitle" > |
14 | <string>Hello World</string> |
16 | <widget class = "QWidget" name= "centralWidget" > |
17 | <widget class = "QLabel" name= "label" > |
18 | <property name= "geometry" > |
26 | <property name= "text" > |
27 | <string>Hello World!</string> |
31 | <widget class = "QMenuBar" name= "menuBar" > |
32 | <property name= "geometry" > |
41 | <widget class = "QToolBar" name= "mainToolBar" > |
42 | <attribute name= "toolBarArea" > |
43 | < enum >TopToolBarArea</ enum > |
45 | <attribute name= "toolBarBreak" > |
49 | <widget class = "QStatusBar" name= "statusBar" /> |
51 | <layoutdefault spacing= "6" margin= "11" /> |
这两个代码,实现的功能是类似的,这下对比,大家有没有更加直观的感觉呢?那我们再看一下实现的效果: 
QML 
可以看到,两者实现的效果是一样的,那么问题来了,你会选择哪一个呢?OK,本节教程就到这里,主要是为了先给大家一个概念,下节课我们正式从创建工程开始进入我们的Qt学习教程。 |