一、QtQuick简介

QT提供了两种独立的方法创建用户界面。

QtQuick模块为创建流畅、鲜活的用户界面提供了一种标记语言。QtQuick模块适合需要动画元素的界面,以及应用程序主要运行在小屏幕和多点触控的设备上的场景。

QtWidgets模块针对传统桌面提供了更多的支持,和目标平台做了更多的集成,无论目标平台是MacOSX、Windows、KDE、GNome。QtWidgets是一个非常高效的基于C++的类库,包含很多常见的用户界面组件,可以非常容易地为这些已存在的组件扩展新的功能。

QtQuick模块是使用QML语言编写应用程序的标准库。Qt QML模块提供了QML引擎和语言架构,QtQuick模块提供了使用QML语言创建用户界面的所有基础类型。

QtQuick模块提供了两套接口,QML API提供了使用QML语言创建用户界面的QML类型,C++ API提供了使用C++代码扩展QML应用程序接口。

QT4.7开始引入了QML,QML(Qt Meta-Object Language,Qt元对象语言)是一种用于描述应用程序用户界面的声明式编程语言。QML使用一些可视组件以及这些组件之间的交互来描述用户界面,是一种高可读性的语言,可以使组件以动态方式进行交互,并且允许组件在用户界面中很容易地实现复用和自定义。QML允许开发者和设计者以类似的方式创建高性能的、具有流畅的动画效果的、极具视觉吸引力的应用程序。QML提供了一个具有高可读性的类似JSON的声明式语法,并提供了必要的 JavaScript语句和动态属性绑定的支持。

二、 Qt Quick工程实例

1、创建Qt Quick应用

选择Qt Quick Application。

工程创建好后,Qt Quick工程包含QML文件、源文件、

2、QML文件

Main.qml文件:

import QtQuick 2.6import QtQuick.Window 2.2 Window{ visible: true width: 640 height: 480 title: qsTr("Hello World") MainForm { anchors.fill: parent mouseArea.onClicked: { Qt.quit(); } }}

QML文档定义了一个QML对象树,由两部分组成:一个import导入部分,一个对象声明部分。

import导入语句类似于C++中的#include,只有导入了相关模块,才能使用其中的类型和功能。导入的模块QtQuick模块是在创建项目时选择的组件集,包含了创建用户界面所需要的基本类型和功能,QtQuick.Window模块中提供了Window类型,可以为Qt Quick场景创建一个顶层窗口。

对象声明部分,QML文档中的对象声明定义了要在可视场景中显示的内容。工程创建了两个对象:Window对象和其子对象MainForm。对象(object)由它们的类型(type)指定,以大写字母开头,后面跟随一对大括号,在括号中包含了对象的特性定义,比如对象的属性值或者其子对象。最外层的对象叫根对象,比如Window,在根对象里面定义的对象,叫做根对象的子对象,比如MainForm就是Window的子对象。 在Window中的visible是Window的属性,用来设置窗口是否显示,可以在帮助文档中查看一个类型的所有属性及用法。

MainForm不是QtQuick模块中的类型,而是自定义的一个用户界面表单(Qt Quick UI Forms),是Qt 5.4后提出的一个概念,类似于Qt C++编程中的UI文件,MainForm.ui.qml文件只能在设计模式下编辑。

import QtQuick 2.6Rectangle { property alias mouseArea: mouseArea width: 360 height: 360 MouseArea { id: mouseArea anchors.fill: parent } Text { anchors.centerIn: parent text: "Hello World" }}

在main.qml文件中,MainForm就是MainForm.ui.qml的一个实例,而MainForm内部调用了mouseArea属性的onClicked事件处理器,相当于调用了MainForm.ui.qml中的MouseArea对象的onClicked事件处理器,Qt.quit()表明当在整个矩形中点击鼠标时要执行的命令就是退出程序。

所有的QML文件是以资源的形式放在.qrc文件中的,QML文件不需要编译,类似于素材。

3、源文件

Main.cpp文件:

#include #include  int main(int argc, char *argv[]){ QGuiApplication app(argc, argv);  QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml")));  return app.exec();}

main函数中定义了一个QQmlApplicationEngine对象,并用其加载了main.qml文件。QQmlApplicationEngine类结合了QQmlEngine和QQmlComponent两个类的功能,提供了一个便捷的方式来加载一个QML文件,但QML文件的所有可视内容必须放在Window对象中才能最终显示出来。

4、pri工程附属文件

Deployment.pri文件:

unix:!android{ isEmpty(target.path) { qnx { target.path = /tmp/$${TARGET}/bin } else { target.path = /opt/$${TARGET}/bin } export(target.path) } INSTALLS += target} export(INSTALLS)

5、创建QML文件

要在工程中创建QML文件,创建QML文件的QML模板可以选择Qt Quick 1、Qt Quick 2和QtQuickUI File三种,Qt Quick 1会导入QtQuick 1.1模块,适用于Qt 4版本;QtQuick 2导入QtQuick 2.0模块,适用于Qt 5版本;QtQuick UI文件生成后会默认使用设计器。

QML文件不需要进行编译,可以直接运行。Qt提供了两个运行QML文件的工具qmlviewer和qmlscene,前者是Qt 4时代的产物,主要用来显示导入了QtQuick 1.1模块的QML文件,而qmlscene用来显示导入了QtQuick 2.0后版本的QML文件。选择“工具→外部→QtQuick→Qt Quick 2Preview”菜单项即可在qmlscene中显示现在打开的QML文档的内容。

三、扩展QML程序

1、添加文本显示

import QtQuick 2.0 Rectangle { width: 100 height: 62 Text { text: "hello World" }}

Text对象用来显示一块文本,其text属性用来指定要显示的文本内容

2、锚布局

QML中每一个组件都有一组无形的锚,分别在上、下、左、右、中心等处,可以定义组件自身和其他组件的相对位置。centerIn指Text组件在parent组件的中心,parent指Text的父组件Rectangle。

import QtQuick 2.0 Rectangle { width: 100 height: 62 Text { anchors.centerIn: parent text: "hello World" }}

3、鼠标互动

import QtQuick 2.0 Rectangle { width: 100 height: 62 Text { anchors.centerIn: parent text: "hello World" } MouseArea { anchors.fill: parent onClicked: { Qt.quit() } }}

MouseArea子对象是鼠标区域,是一个不可见的组件,通过MouseArea对象可以实现鼠标互动。anchors.fill是进行填充,将鼠标区域覆盖整个Rectangle窗口。onClicked是Qt C++中的信号处理函数,即信号处理器,其语法是on,onClicked是Clicked单击信号的处理,当在窗口上单击鼠标后会执行Qt.quit()全局函数,执行结果就是退出程序。

4、id属性和属性别名

id属性是一个对象的名字,来唯一确定一个对象,在其他对象中可以通过id引用该对象。

import QtQuick 2.0 Rectangle { width: 100 height: 62 property alias mArea:mouseArea Text { anchors.centerIn: parent text: "hello World" } MouseArea { id:mouseArea anchors.fill: parent }}

MouseArea对象,设置其id为mouseArea,在Rectangle中可以通过mouseArea来访问MouseArea对象。在其他QML文件访问Rectangle内的子对象,需要在Rectangle中自定义属性,并且该属性需要是子对象的属性别名,例如声明的mArea属性,alias表明mArea是mouseArea的别名。

mArea.onClicked:{ Qt.quit()}

json文件存储 qt_QT开发(五十一)——QtQuick基础相关推荐

  1. 【Python爬虫学习笔记6】JSON文件存储

    JSON简介 JSON(全称JavaScript Obejct Notation,JavaScript对象标记),基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...

  2. 【Visual C++】游戏开发五十一 浅墨DirectX教程十九 网格模型进阶之路

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8770426 作者:毛星云(浅墨 ...

  3. package.json文件||项目依赖||开发依赖

    package.json文件 node_modules文件夹的问题 package.json文件的作用 项目描述文件,记录了当前项目信息,例如项目名称.版本.作者.github地址.当前项目依赖了哪些 ...

  4. Minecraft 1.16.5模组开发(五十一) 方块实体 (Tile Entity)

    Minecraft1.12.2 方块实体教程 Minecraft1.18.2 方块实体教程 MC中有许多很有趣的方块实体如告示牌.酿造台.附魔台-我们今天在1.16的版本下实现一个类似于熔炉的方块实体 ...

  5. 爬虫:JSON文件存储

    JSON ,全称为 JavaScript Object Notation 也就 JavaScript 对象标记,它通过对象和数组的组合 来表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换 ...

  6. (转)分布式文件存储FastDFS(五)FastDFS常用命令总结

    http://blog.csdn.net/xingjiarong/article/details/50561471 1.启动FastDFS tracker: /usr/local/bin/fdfs_t ...

  7. npm 包与模块关系 下载使用包 init命令 package.json文件 node_modules文件夹 全局安装包和本地安装包 开发依赖和生产依赖

    npm 了解npm npm 全称Node Package Manager(node 包管理器),它的诞生是为了解决 Node 中第三方包共享的问题. npm 不需要单独安装.在安装Node的时候,会连 ...

  8. 让IIS Express支持Json文件

    问题由来 同事在做一个web系统的二级联动时将联动数据保存在一个Json文件中,当他将代码提交后,到我机子上运行时总是报该文件404错误,反复检查路径以及权限并没有问题.将问题反馈给他时,他表示在他机 ...

  9. Flutter持久化存储之文件存储

    前言 本篇将给大家分享Flutter中的file存储功能,Flutter SDK本身已经有File相关的api,所以在Flutter中使用file存储的关键是如何获取手机中存储的目录,然后根据目录路径 ...

  10. 用python3做学生管理系统_详解用python实现基本的学生管理系统(文件存储版)(python3)...

    详解用python实现基本的学生管理系统(文件存储版)(python3) 来源:中文源码网    浏览: 次    日期:2019年11月5日 详解用python实现基本的学生管理系统(文件存储版)( ...

最新文章

  1. siwft 写时复制 Copy-On-Write
  2. vue结合php增删改查实例,从vue基础开始创建一个简单的增删改查的实例
  3. C语言经典例20-小球反弹高度问题
  4. TensorFlow官方入门实操课程-一个神经元的网络(线性曲线预测)
  5. react之使用js创建虚拟DOM
  6. Pentium Pro架构/流水线及其优化 (3) - 指令流水线/乱序执行核/高速缓存/分支预测/指令预取
  7. java 字符界面 curses_[C++]Linux之图形界面编程库[curses库]之入门教程
  8. Linux系统更新并清除旧组建
  9. 【转】四阶魔方还原1
  10. sqlalchemy用in_ 批量delete
  11. double IE之H3CIE之路--我的H3CIE考试经历
  12. 图片转Excel表格
  13. 加权平均数的例子_excel如何计算加权平均值_excel加权平均值计算公式
  14. WinEdit10 添加论文引用,XeLaTex编译后论文中的引用变成了【?】
  15. Dialog加载页面动画(Loding.....加载等待)三种方式
  16. powershell 结束进程的四种写法
  17. Python匿名函数和高阶函数
  18. 【多载波系统】基于多载波系统分析等比合并EGC,最大比合并MRC,正交恢复合并ORC以及最小均方误差合并MMSE的matlab仿真
  19. 读书笔记之——个人知识管理
  20. 【前端学习路线】前端攻城狮,需要掌握的技术

热门文章

  1. 使用API网关构建微服务
  2. 项目中遇到的各种bug和踩过的坑
  3. mdadm管理raid
  4. sqlmap注入语句整理
  5. uva_816 Abbott's Revenge(BFS求解最短路、结点状态由坐标和方向表示)
  6. expdp 字符集从ZHS16GBK到AL32UTF8
  7. 小项目: low版本的 员工信息程序:
  8. Activiti中的log4j(slf4j)的配置
  9. 值得推荐的C/C++框架和库(转)
  10. sap 归档(ARCHIVE)