目录
一:Ubuntu18.04中Qt环境的搭建
1.下载Qt安装包
2.安装
二.Qt简介
三.第一个Qt程序
1.用QtCreator创建一个空的Qt项目(从零开始)
2.给空的项目添加源文件
四.移植Qt库到开发板上去
五.配置Qt的ARM交叉编译套件
文章所需资料如下
链接:https://pan.baidu.com/s/1It8HTfpN7L91MZXi2owPAQ?pwd=8888
提取码:8888
从官网下载(download.qt.io)
qt 5.9.1 版本linux版本的安装包文件名为 qt-opensource-linux-x64-5.9.1.run
将下载好的安装包(qt-opensource-linux-x64-5.9.1.run)拷贝到共享目录
运行虚拟机,打开Ubuntu18.04,进入到Qt安装包所在的路径
如:
将安装包拷贝到共享目录
切换到共享目录
cd /mnt/hgfs/Share
确认安装包是否在该目录下
ls
如果能看到 qt-opensource-linux-x64-5.9.1.run 这个文件,则说明安装在该路径
运行安装程序
./qt-opensource-linux-x64-5.9.1.run
或者通过文件管理器找到安装包双击运行
根据安装向导安装Qt程序,有 skip 就 skip,有下一步就下一步,直到安装完成
安装完成以后,会自动打开QtCreator
QtCreator就是Qt的主程序了,平时编写Qt程序都是在该软件下编写的
建议大家在任务栏中,右键点击QtCreator的图标,选择 添加到收藏夹,
这样的话,在Ubuntu的任务栏中就会有一个Qt的图标了,下次要运行Qt,直接点击该图标就可以了
安装完Qt软件以后,新建一个带界面的Qt项目,运行时会报错:找不到 -lGL 这个库
问题原因:
QtCreator在运行程序的时候,依赖于系统的一个库,库名为 GL,
在编译完后,链接的时候需要找到这个库才能正常运行
解决办法:
在 Ubuntu18.04的 /usr/lib/x86_64-linux-gnu 目录下 有一个名为 libGL.so.1.0.0 的动态库文件
这个文件就是Qt在运行程序是所需要链接的库文件,只是它的路径以及文件名不符合Qt的扫搜条件
所以,我们只要将这个文件在指定的路径下为其创建一个符合Qt扫搜路径的软链接文件就可以了:
sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1.0.0 /usr/lib/libGL.so
官网:qt.io
Qt是一个基于C++的跨平台的应用程序开发框架
目前支持三种语言:
C++
qml
python
跨平台:
一次编写,到处编译
在QtCreator中写一次代码,就可以生成不同平台的版本的程序
主流的平台都支持,如:Windows、Linux、Android、MacOs...
应用程序:
主要用于GUI(图形用户界面)程序开发,但又不仅仅只是进行GUI设计,还可以用于后台或者底层程序的开发
开发框架:
有现成的库可供使用,不需要从零开始,可以节省时间/精力/金钱,提高开发效率
Qt始于1991年,中间经历了多个版本,目前主流的版本是Qt5和Qt6
从许可协议的角度,Qt还可以分为商业版和开源版。
QtCreator是一个IDE集成开发工具,包含了代码编辑器、编译器、调试器、链接器...
一键编译执行
欢迎 -> new project -> 其他项目 -> empty qmake project
右键点击左侧项目栏中的项目名称,选择 添加新文件
在弹出的对话框中选择 C++ -> C++ source file -> 文件名设置为 main -> 完成
在项目目录中会多一个 Sources 的目录,里面就存了该项目中的所有.cpp文件(源文件)
双击 Sources目录中的 main.cpp,进行编辑
如果需要显示界面,那么就需要在项目的.pro文件中添加界面模块
双击 项目目录中的 xxxx.pro 文件,在该文件中输入以下代码(添加界面模块):
QT += widgets
只有添加了这个模块,才能使用Qt中界面相关的类型
C++中的动态内存分配:
在C++中,有类的概念,在给对象分配内存的时候,需要调用对应的构造函数,
来完成对象的初始化
在释放对象的时候,需要调用析构函数来完成对象的收尾工作
所以,C语言中的动态内存分配方法在C++中不太适用
因此,C++引入了两个关键字:new 和 delete
new 用来动态分配内存
delete 用来释放对象的内存
new 在实例化对象的时候,会自动调用构造函数来完成对象的初始化
delete 在释放对象的时候,会自动调用析构函数来完成对象的收尾工作
new 分配的存储区,我们称之为自由存储区
而malloc分配的存储区是在堆空间
用malloc在分配空间的时候,不能赋初始值
用new分配空间的时候,可以初始化
new 和 delete 的用法:
用new来分配一个变量的存储空间:
int *pdata = new int;
int *pdata = new int{15}; //分配空间的同时进行初始化
int *pdata = new int(15); //分配空间的同时进行初始化
用new来分配一个对象的存储空间:
class Test
{
public:
Test(){} //默认构造函数
Test(int d1,char d2,float d3)
{
data1 = d1;
data2 = d2;
data3 = d3;
}
private:
int data1;
char data2;
float data3;
};
Test *pts1 = new Test; //调用默认构造函数
Test *pts2 = new Test{6,'a',3.14}; //调用有参构造函数
用new来分配数组:
int *array = new int[100]; //分配一个有100个元素的数组
int *array = new int[100]{1,2,3,4,5,6,7,8,9,10}; //分配空间的同时设置初始值,没有设置的部分默认为0
用delete释放一个变量或者对象的存储空间:
delete pdata;
delete pts1;
用delete释放一个数组:
delete []array;
将 qt-armlib-591.tar.gz 文件拷贝到Ubuntu的共享目录
进入该共享目录,找到该文件
cd /mnt/hgfs/Share/工具资料/
ls
如果能找到 qt-armlib-591.tar.gz 这个文件,就可以继续往后面操作
解压该文件,建议解压到Ubuntu的 /opt 目录
sudo tar xvf qt-armlib-591.tar.gz -C /opt
解压完成以后,在 /opt 目录中,会生成一个 qt-armlib-591 的目录
该目录中有两个目录的内容是需要传输到开发板上去的:lib、plugins
所以,将这个两个目录进行归档,做成一个归档文件,然后再传输到开发板上去
sudo tar zcvf qt-6818lib.tar.xz lib plugins
归档完成以后,在该目录下就会生成一个 qt-6818lib.tar.xz 的归档文件
这个文件比较大,有20Mb,如果用串口传输,需要传很久,建议用U盘或者网络传输
先将归档文件传输到Windows的工项目录,然后再通过U盘进行传输
cp qt-6818lib.tar.xz /mnt/hgfs/Share
当U盘接到开发板上以后,会将U盘的文件挂载到开发板的文件系统,挂载的路径为:
/mnt/udisk
也有一部分的U盘插上以后,在udisk目录中看不到数据(SecureCRT不能显示中文,字符编码不同)
此时就需要手动去挂载U盘
自行百度
挂载好U盘以后,进入到挂载目录 /mnt/udisk,就可以看到U盘中的文件了
将开发板上老版本的Qt库删除
cd /usr/local/Qt-Embedded-5.7.0
rm -rf lib plugins
将qt-6818lib.tar.xz归档文件解压到开发板的Qt库路径中去
cd /mnt/udisk
tar xvf qt-6818lib.tar.xz -C /usr/local/Qt-Embedded-5.7.0
等待解压完成
打开Ubuntu中的QtCreator
找到菜单栏中的 工具 -> 选项 -> 构建和运行
选择 构建和运行中的 编译器 页,选择 添加 -> GCC -> C
可以通过 sudo find -name arm-linux-gcc 找到C语言交叉编译器所在的路径
名称设置为 arm-linux-gcc
编译器的路径就是上面查找的结果(绝对路径),一般为:/usr/local/arm/5.4.0/usr/bin/arm-linux-gcc
点击 Apply 保存
配置C++编译器:
选择 添加 -> GCC -> C++
名称设置为 arm-linux-g++
编译器路径设置为C++交叉编译器的路径,一般为:/usr/local/arm/5.4.0/usr/bin/arm-linux-g++
点击 Apply 保存
配置Qt编译器版本:
选择 构建和运行中的 Qt versions,选择 添加
会弹出一个文件选择对话框,只能选择 qmake 文件
要选择的是arm版本的qmake文件,所在的路径就是前面解压qt-armlib-591.tar.gz之后的路径
/opt/qt-armlib-591/bin/qmake
点击 Apply 保存
配置Qt ARM 编译套件:
选择 构建和运行中的 构建套件 选择 添加
名称设置为 Arm Qt 5.9.1 GCC
设备类型设置为 通用linux设备
C语言编译器设置为 arm-linux-gcc
C++语言编译器设置为 arm-linux-g++
Qt版本设置为 Qt5.9.1(qt-armlib-591)
点击 Apply 保存
点击 OK 退出
如果项目已经存在,关闭项目
删除项目源码目录中的 xxx.user 文件
重新打开项目
在 Configure Project 对话框中,将 ARM Qt 5.9.1 GCC 选上
选择 Configure Project 按钮
在项目中选择编译套件
见图 在项目中选择编译套件.jpg
注意,如果是用 ARM套件来编译,那么不能在PC上运行
所以,只能点击左下角的锤子(构建)
构建完成以后,在项目源码的同级目录下有一个类似于 build-widgets-ARM_Qt_5_9_1_GCC-Release 的构建目录
在该目录中的widgets(项目名称)文件就是最终传输到开发板上去运行的文件