立即注册 找回密码

微雪课堂

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

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

2020-7-6 17:23| 发布者: dasi| 查看: 14571| 评论: 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文件。
import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true
    width: 400
    height: 300
    title: qsTr("Hello World")

    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
}

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

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Hello World</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>160</x>
      <y>110</y>
      <width>81</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>Hello World!</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>400</width>
     <height>23</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

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

QML

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


229

顶一下

刚表态过的朋友 (229 人)

相关阅读

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

GMT+8, 2024-12-22 19:34 , Processed in 0.012269 second(s), 13 queries .

返回顶部