用户名 立即注册 找回密码

微雪课堂

搜索
微雪课堂 树莓派 树莓派QT教程 查看内容

树莓派Qt系列教程5:Qt Quick 之 QML 入门

2020-7-6 17:23| 发布者: dasi| 查看: 15499| 评论: 0|原作者: IAMLIUBO

摘要: 本篇文章带大家简单来了解一下Qt Quick是什么

前言

我们在第一篇教程的时候给大家讲过本系列教程会采用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文件。
01import QtQuick 2.12
02import QtQuick.Window 2.12
03 
04Window {
05    visible: true
06    width: 400
07    height: 300
08    title: qsTr("Hello World")
09 
10    Text {
11        text: qsTr("Hello World")
12        anchors.centerIn: parent
13    }
14}

大家猜一猜上面的代码完成了哪些操作呢?大家要是觉得还是非常麻烦的话,可以跟下面的代码做一下对比,下面的代码是Qt Widgets中专门处理界面的代码,也就是我们常说的.ui文件,编写语言是XML,当然可以用设计师模式来通过图形界面编写:

01<?xml version="1.0" encoding="UTF-8"?>
02<ui version="4.0">
03 <class>MainWindow</class>
04 <widget class="QMainWindow" name="MainWindow">
05  <property name="geometry">
06   <rect>
07    <x>0</x>
08    <y>0</y>
09    <width>400</width>
10    <height>300</height>
11   </rect>
12  </property>
13  <property name="windowTitle">
14   <string>Hello World</string>
15  </property>
16  <widget class="QWidget" name="centralWidget">
17   <widget class="QLabel" name="label">
18    <property name="geometry">
19     <rect>
20      <x>160</x>
21      <y>110</y>
22      <width>81</width>
23      <height>16</height>
24     </rect>
25    </property>
26    <property name="text">
27     <string>Hello World!</string>
28    </property>
29   </widget>
30  </widget>
31  <widget class="QMenuBar" name="menuBar">
32   <property name="geometry">
33    <rect>
34     <x>0</x>
35     <y>0</y>
36     <width>400</width>
37     <height>23</height>
38    </rect>
39   </property>
40  </widget>
41  <widget class="QToolBar" name="mainToolBar">
42   <attribute name="toolBarArea">
43    <enum>TopToolBarArea</enum>
44   </attribute>
45   <attribute name="toolBarBreak">
46    <bool>false</bool>
47   </attribute>
48  </widget>
49  <widget class="QStatusBar" name="statusBar"/>
50 </widget>
51 <layoutdefault spacing="6" margin="11"/>
52 <resources/>
53 <connections/>
54</ui>

这两个代码,实现的功能是类似的,这下对比,大家有没有更加直观的感觉呢?那我们再看一下实现的效果: 

QML

可以看到,两者实现的效果是一样的,那么问题来了,你会选择哪一个呢?OK,本节教程就到这里,主要是为了先给大家一个概念,下节课我们正式从创建工程开始进入我们的Qt学习教程。


229

顶一下

刚表态过的朋友 (229 人)

相关阅读

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2025-4-14 23:31 , Processed in 0.015425 second(s), 13 queries .

返回顶部