嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序

网友投稿 851 2022-05-28

上篇文章: 嵌入式Linux-Qt环境搭建介绍了如何搭建在Linux开发板中搭建Qt的运行环境,并测试了Qt自带的例程。

本篇,来介绍如何自己编写一个Qt程序,并将编译结果放到Linux开发板中运行。

1 Windows上编写Qt程序

因为Qt是支持跨平台的,所以我们可以先在Windows平台上编写和查看Qt的运行效果,然后再通过交叉编译,编译出ARM Linux平台的可执行文件,最终放到开发板中查看运行结果。

Windows上需要安装Qt Creator软件来开发Qt程序,该软件的安装过程,和大多数软件的安装过程都差不多,在此不再演示安装过程。

下面介绍如何创建一个Qt工程。

1.1 新建Qt工程

Qt Creator本质也是一个集成开发环境,与Visual Studio之类的创建工程的流程类似,其软件界面如下:

创建工程,选择左上角菜单中的“文件”->"新建文件或项目",弹出如下窗口,然后默认选择Qt Widgets Application,然后右下加点击“Choose"按键:

出现选择项目工程的存放位置,然后再下一步:

这里会用到Visual Studio中的一些功能,默认即可,然后下一步:

然后要选择类信息,基类里可选的有QMainWindow、QWidget和QDialog,这里我们选择QWidget。

嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序

下面还有一个”创建界面“的勾选框,那个是用来通过图形化的方式设计显示界面,本篇暂用不到,先取消勾选,然后点下一步

到这里,Qt工程就创建好了,点完成:

创建的Qt工程如下,主要包含4个文件:

clock.pro:Qt工程的配置文件

main.cpp:主程序

widget.cpp:窗口程序

widget.h:窗口程序的头文件

1.2 代码编写(时钟程序)

Widget的构造函数

Widget::Widget(QWidget *parent) : QWidget(parent) { QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(1000); setWindowTitle(tr("Clock")); setMinimumSize(200, 200); //设置最小尺寸 }

首先创建了一个Qt的定时器,设置超时时间为1s(1000ms),超时时间到,更新表盘的显示。

第2行是Qt中最常用的信号和槽机制:

connect(timer, SIGNAL(timeout()), this, SLOT(update()));

信号和槽,简单的立即,就是信号SIGNAL出现后(1s定时器超时),触发槽SLOT函数执行(更新表盘的显示)

界面设计

时钟程序中的表盘,表针等,都是通过画图的方式实现的,具体的代码如下:

void Widget::paintEvent(QPaintEvent *event) { int side = qMin(width(), height()); QTime time = QTime::currentTime(); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.translate(width()/2, height()/2); //画图的基准位置 painter.scale(side/200.0, side/200.0); //随窗口尺寸自动缩放 //表盘 for (int i=0; i

第2句:

QTime time = QTime::currentTime();

是来获取系统的当前时间。

1.3 编译运行

现在Windows平台中编译运行,查看效果:

该时钟是可以根据窗口大小的变化,自动进行放到或缩小显示的:

2 Ubuntu中交叉编译Qt

Windows中测试通过后,就需要编译出能够在ARM平台运行的可执行程序了,这里需要在Ubuntu中进行编译。

2.1 复制源文件到Ubuntu中

将Windows中的QT工程源码,复制到Ubuntu中,注意.user文件是不需要的,这个是Windows平台的编译配置。

复制到Ubuntu中的合适位置:

2.2 交叉编译

编译ARM平台的Qt程序,需要使用ARM平台的编译工具链。

上篇文章,在搭建Qt环境,编译Qt源码时,已经生成了ARM平台的Qt编译工具链,其位置是在上篇文章介绍的make install那一步的安装位置,我的是在”/home/xxpcb/myTest/imx6ull/otherlib/qt/qt-everywhere-src-5.12.9/arm-qt/“,这里需要先用到它的qmake工具先自动生成Makefile文件,再通过make指令进行编译。

首先的使用qmake生成Makefile,进入程序源码目录,执行qmake指令:

/home/xxpcb/myTest/imx6ull/otherlib/qt/qt-everywhere-src-5.12.9/arm-qt/bin/qmake

成功执行之后,就可以看到自动生成的Makefile文件:

然后执行make指令进行编译:

make

编译完可以看到可执行文件clock。

我们可以再使用file命令查看该可执行文件的平台信息:

file clock

可以看到该可执行文件是ARM平台的。

3 Linux开发板中运行Qt程序

3.1 复制可执行文件到开发板中

此次测试,仍然使用的是网络位置挂载根文件系统的方式,通过如下指令将可执行文件复制到根文件系统中(开发板中):

sudo cp clock ~/myTest/nfs/rootfs/myProj/qt/mytest/

3.2 查看开发板中的运行效果

然后就可以在开发板中执行该程序,查看效果了:

./clock

运行效果如下:

由于板子的网络时间还不能正确获取,这里显示的时间其实是不对的,不过表针仍然会1秒1秒的走动。

4 总结

本篇详细介绍了如何自己编写一个Qt程序,如何通过交叉编译,最终放到开发板中执行的过程。

ARM Linux Qt 嵌入式

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:HDFS的架构及写入流程。
下一篇:Java语言概述以及环境搭建丨【奔跑吧!JAVA】
相关文章