参考书目:

Sherriff, Nicholas.Learn Qt5: Build Modern, Responsive Cross-platform Desktop Applications with Qt, C++, and QML

OS: Windows 10

IDE: Qt Creator

Qt version: 5.9.2

本想在VS 2017平台上学习Qt,却一直没找到合适的教程参考。后来在Amazon上偶然看到这本书的电子版比较便宜就买了下来,虽然它是在Qt Creator平台上实现,但我大体看了一下感觉不错,而且这本书比较新(首次出版于2018年2月,出书时Qt的最新版本是5.10),就打算用它学下去。这里写一下学习笔记,更新进度与看书进度同步。

这篇文章讲的是不使用IDE提供的工程模板,而是自己通过先创建一个.pro工程文件,然后在此基础上一步步实现简单的Hello World工程。这样有助于初学者理解Qt工程的结构,并对工程中各种繁杂后缀名(.qml、.qrc、.user等)的文件和它们之间的关系建立初步的理解——它们只是简单的文本文件而已。

Qt下载地址:http://download.qt.io/ (打开后找archive -> qt,找到相应的版本文件夹后,选择qt-opensource-windows-x86-x.x.x.exe下载)

1.新建一个专门用来练习Qt的文件夹;

2.在刚刚创建的文件夹中,新建这次的项目文件夹scratchpad;

3.在scratchpad文件夹中,创建文本文件scratchpad.pro,并打开(默认用Qt Creator打开了)。这个文件就是Qt的工程文件,在你获取到别人做的Qt工程时,也是通过打开这个.pro文件来进入工程(pro就是指project);

4.单击Configure Project之后,Qt Creator会自动关闭,然后就可以看到scratchpad文件夹下多了个scratchpad.pro.user,这实际上是个包含工程各种配置信息的XML文件,如果你删除了这个文件再打开scratchpad.pro的话,又会重复刚才的操作;

5.在scratchpad文件夹下继续新建三个文本文件:main.cpp、main.qml、qml.qrc,然后再次打开scratchpad.pro文件;

6.我们的.pro文件是被一个叫qmake的工具进行解释的。在刚才打开的Qt Creator中打开scratchpad.pro进行编辑:

TEMPLATE = appQT += qml quickCONFIG += c++14
SOURCES += main.cpp
RESOURCES += qml.qrc

下面来解释这段代码的含义:

TEMPLATE变量告诉qmake这个工程的类型,在本例,这是个可执行的应用程序,用app来代表。其他的值比如lib表示的是二进制库,subdirs表示多项目解决方案中的一个;

Qt可以看作是一个模块化框架,我们可以按照实际需求向其中添加需要的部分。QT指出了我们想用的Qt模块,Qt的核心模块和gui模块已经默认被包含到项目中了;

CONFIG用来添加项目配置和编译器选项。在本例中,我们指出我们想使用C++14的特性;

SOURCE用来添加我们想包含到工程里的.cpp文件,在这里添加的是main.cpp,不过目前这个文件还是空的,以后main函数就写在这里。而且以后还会多写一个HEADERS用来指出我们要使用的头文件;

RESOURCES指出了所有要包含进工程的.qrc资源文件(resources collection files),这种文件用来管理我们工程用到的各种资源文件,比如图片、字体、qml文件等。

写好了这些之后,按快捷键Ctrl+S保存会自动调用qmake解释这个.pro文件。然后就可以在左上角的项目面板中看到了我们刚才添加的.cpp文件和.qrc文件。

7.接下来双击main.cpp来编辑我们的源文件:

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

以上写的这些代码是创建了QtGUIApplition对象的一个实例,然后让它去加载我们的main.qml文件。这段代码看起来巨简单(觉得不简单的可以了解一下MFC的代码),因为Qt框架已经为我们做好了那些复杂层级的操作,而且不用担心平台问题,也不用操作窗口句柄或者OpenGL。

值得一提的是,我们可以通过【点击代码中的Qt类名(属性和方法也可以),然后按F1】来查看该类的官方说明。

8.接下来需要编辑的文件是qml.qrc,在Qt Creator中右键点击该文件,然后选择Open with中的Plain Text Editor,然后输入以下代码:

<RCC><qresource prefix="/"><file>main.qml</file></qresource>
</RCC>

然后回到main.cpp,注意这一段:qrc:/main.qml,这个qrc:/main.qml的意思就是“在qrc文件中找到这个在/目录下,名字叫main.qml的文件”。这里解释一下为什么要在qrc文件中找qml文件,我们可以把.qrc文件看成是一个简单的文件管理器,这里面保存着所有我们工程需要用到的资源文件,而这些资源文件和我们操作系统中的资源文件是一一对应的,看上面写好的.qrc文件里,包含在<qresource>标签中的main.qml就是我们目前声明要用到的唯一的资源文件了。注意,在这里因为.qml文件和.qrc文件处在同一目录下,而如果这个.qml文件在同级的一个叫views的文件夹下的话,main.cpp的相应部分就应该写成这样了:

engine.load(QUrl(QStringLiteral("qrc:/views/main.qml")));

而在.qrc文件中则应该写成这样:

<file>views/main.qml</file>

9.保存了这些文件后,就会在项目面板中的qml.qrc下看到main.qml了:

双击打开并编辑main.qml:

import QtQuick 2.9
import QtQuick.Window 2.3Window {visible: truewidth: 1024height: 768title: qsTr("Scratchpad")color: "#ffffff"Text {id: messageanchors.centerIn: parentfont.pixelSize: 44text: qsTr("Hello Qt Scratchpad!")color: "#008000"}
}

这个文件指出了应用程序启动时,呈现给用户的视觉样式。

这里的import语句类似于C++的#import语句,只是它引用的是整个模块而不是什么头文件。在本例中,我们想通过这个QtQuick模块获取所有QML支持的类型,通过QtQuick的子模块Window获取控制Window组件的权限。模块的版本号可以在Qt的官方文档中查看到。

Window模块可以让我们获取到整个窗口,所有组件的渲染都是在窗口中进行的。在本例中,我们设置了窗口的尺寸为1024×768像素,名称为“Scratchpad”,背景色为RGB表示的白色。

我们还在Text组件中添加了欢迎信息,并把这个欢迎信息居中、设置字体大小和颜色。

10.编译和运行我们的工程。先单击IDE左下角的小电视选择要使用的工具包和编译配置

然后右击项目面板上的工程名, 点选“执行qmake”

最后单击左下角的绿色三角运行:

Qt5初见笔记(一)使用单个.pro文件创建Hello World工程(参考Sherriff, Nicholas《Learn Qt5》)相关推荐

  1. Qt5学习笔记之零碎问题记录

    目录 概述 1.qDebug输出问题 1.1 qDebug() << "OK"报错 1.2 qDebug打印QString类型 2.QString字符串的操作 3.修改 ...

  2. Qt5学习笔记之串口助手三:打包成Windows软件

    这里写目录标题 添加图标 打包程序 测试打包好的软件 添加图标 图标的获取可以参考我的另一篇文章:Qt5学习笔记之图标下载和转换,这里只记录下Qt中使用图标的方法. 1.切换到release模式下进行 ...

  3. Qt5学习笔记之串口助手四:增加16进制/ASCII切换、周期发送

    目录 1. 概述 2. 16进制/ASCII发送 2.1 功能实现 2.2 界面修改 3. 接收框显示发送内容 3.1 以16进制/ASCII显示 3.1.1 界面修改 3.1.2 功能实现 3.2 ...

  4. Qt5学习笔记之QString的使用

    目录 概述 2.QString字符串的操作 2.1 拼接 2.2 裁剪 2.3 转换为int型 2.4 int转换为QString 2.5 小写字母大写字母转换 2.6 转换为16进制 概述 学习过程 ...

  5. Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  6. DSP(TMSF280049C)学习笔记1:软件的安装与新工程的建立

    DSP(TMSF280049C)学习笔记1:软件的安装与新工程的建立 初次接触DSP(TMSF280049C)这款开发板,主要对学习的过程进行记录,因为是初次学习,可能有些地方存在错误,还请各位大神帮 ...

  7. Qt 编译环境笔记 (qt.conf) (xxxx.pro)

    Qt的SDK能否放到任何目录并用来编译Qt应用 答案是:可以 提出这个问题的原因是由于Qt在编译的时候将安装路径写死在库文件中,当使用qmake xxxx.pro生成的Makefile会使用库文件中写 ...

  8. Qt学习笔记之项目管理(pro)文件

    一.概述 项目管理(pro)文件是对整个工程的配置,例如工程里包含哪些文件,路径是什么:以来哪些库,路径是什么:使用了Qt的哪些组件等等,实现自动化编译. 二.pro常用关键字的含义 2.1 QT 指 ...

  9. 【note】Swift初见笔记

    //: Playground - noun: a place where people can play import UIKit // -----------------------Swift初见- ...

  10. 麒麟系统开发笔记(二):国产麒麟系统搭建Qt开发环境安装Qt5.12

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/123840699 红胖子(红模仿)的博文大全:开发技术集 ...

最新文章

  1. C#利用SerialPort类对串口发送接收数据
  2. python划分有限元网格_有限元网格划分应该考虑些什么
  3. 闪电网络介绍以及试用 (上)
  4. 如何在C#控件中画点并获得指定点的像素颜色
  5. 小数 ###_C#中的小数关键字
  6. 案例:演示使用beantuils的setProperty()、getProperty()和populate()方法访问JavaBean的属性
  7. CENTOS 7 YUM 没有可用的软件包 NGINX
  8. python——异常except语句用法与引发异常
  9. 否认气候变暖的人都是睁眼说瞎话
  10. paip.若只如初见——WEB或BS开发必备基础知识
  11. 2.11 数值分析: 事后误差估计和迭代改善
  12. 【牛客网C++服务器项目学习】Day12-网络编程的两种事件处理模式
  13. 研究生初学机器学习的几点建议
  14. JavaScript: Checkbox onChange event is differently processed by IE and FF
  15. erp系统不能连接服务器配置,erp系统云服务器怎么配置
  16. Rviz显示不出数据了之一文搞懂Qos
  17. Kubernetes kubeadm 证书到期,更新证书
  18. (HIIT)高强度间歇训练
  19. 让靠谱的人推荐靠谱的人:基于关系链计算的职场社交应用“脉脉”,上线“好友推荐候选人”功能
  20. [JavaScript]关于JavaScript中DOM对象的使用

热门文章

  1. c++智能指针转化:static_pointer_cast、dynamic_pointer_cast、const_pointer_cast、reinterpret_pointer_cast
  2. MobaXterm连接局域网的虚拟机
  3. 中国医科大学2021年9月《社区护理学》作业考核试题
  4. C++经典编程题目(九)玩火柴棍游戏
  5. 从hr口中了解react的状态管理库(mobx, recoil), 立马过来学习之mobx
  6. python转换字符编码_python 字符串编码转换
  7. ZooKeeper 选举机制
  8. 计算机开机配置失败6,win7开机配置windows update失败怎么跳过?-win7配置update失败,安全模式还是配置失败...
  9. Android获取CPU使用率的几种方式
  10. 羊皮卷之七-我要笑遍世界(中英对照)