0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

码农爱学习 来源:码农爱学习 作者:码农爱学习 2022-06-02 09:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

上篇文章介绍了如何搭建在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之类的创建工程的流程类似,其软件界面如下:

poYBAGKXfviACv21AAEijaCVbAg618.png

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

pYYBAGKXfv6ACFgOAABV9vt-L84049.png

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

poYBAGKXfwaAejQwAAAkwzfLE7s296.png

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

pYYBAGKXfwyAXFQ0AAAkcLkzY5E226.png

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

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

poYBAGKXfxOALLBTAAA02acWN-A919.png

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

poYBAGKXfxiARD60AAAmzaE7fls127.png

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

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

main.cpp:主程序

widget.cpp:窗口程序

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

pYYBAGKXfx2AA02ZAAD1xORuFww084.png

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平台中编译运行,查看效果:

pYYBAGKXfyaAWkg1AAHFzNAdmQs888.png

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

pYYBAGKXfyuACZ49AABJoS-M_wo902.png

2 Ubuntu中交叉编译Qt

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

2.1 复制源文件到Ubuntu中

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

poYBAGKXfzGAbDjRAABQvuWe9qk049.png

复制到Ubuntu中的合适位置:

pYYBAGKXfziAX0eTAAAzxIo-gRY421.png

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文件:

pYYBAGKXfz-AHhnJAACvLQXs1SM877.png

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

make
poYBAGKXf0aAUiwlAAHXhcKuUfU908.png

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

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

file clock
poYBAGKXf02AalYqAAHj4jcziv8433.png

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

3 Linux开发板中运行Qt程序

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

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

sudo cp clock ~/myTest/nfs/rootfs/myProj/qt/mytest/
pYYBAGKXf1WALW_FAAHLQaP6e1U234.png

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

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

./clock

运行效果如下:

pYYBAGKXf1uAOfwrAAJK_7y7SJc130.png

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

4 总结

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9499

    浏览量

    388731
  • 嵌入式
    +关注

    关注

    5186

    文章

    20149

    浏览量

    328851
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217980
  • 开发板
    +关注

    关注

    25

    文章

    6123

    浏览量

    113355
  • Qt
    Qt
    +关注

    关注

    2

    文章

    318

    浏览量

    40299
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ARM嵌入式这样学

    )话题大热,Arm也推出神经网络机器学习软件 Arm NN,可在基于Arm的高能效平台上轻松构建和运行机器学习应用程序,未来
    发表于 12-04 07:48

    tiny4412 Qt环境搭建

    1.硬件环境 PC端:ubuntu18.04 开发板硬件平台:tiny4412 内核版本:linux3.5 交叉编译器:arm-linux-gcc Qt版本:Qt5.6 2.搭建 ub
    的头像 发表于 10-21 09:54 266次阅读
    tiny4412 <b class='flag-5'>Qt</b>环境搭建

    LVGL近期很多人问,那它和Qt哪个好?

    最近拜访做工业控制、智能家居的客户时,常被问到同一问题:嵌入式产品,GUI选LVGL还是Qt? 其实工具选择没有绝对的“好”与“坏”,但选对适配场景的GUI图形用户界面工具,能直接让产品开发效率
    的头像 发表于 09-23 15:54 816次阅读
    LVGL近期很多人问,那它和<b class='flag-5'>Qt</b>哪个好?

    【飞凌T527N开发板试用】QT应用开发

    qt介绍 Qt 是一跨平台的C++ 应用程序开发框架 ,由挪威公司 Trolltech(现为 The Qt Company)开发。
    发表于 08-19 15:04

    嵌入式工程师为什么要学QT?

    、Clang、MSVC等,并提供了跨平台的编译和发布流程。 强大的集成开发环境(IDE) Qt Creator提供了代码编辑、调试、构建和发布功能,极大地提升了开发效率。 因此,Qt嵌入式工程师值得学习的一
    发表于 08-14 15:15

    【米尔RK3506国产开发板评测试用】1、硬件介绍、SDK开发环境和QT开发环境搭建

    。 修改QT的Projects界面中的Command line Argments为--platform liunxfb,指定QT使用的显示后端类型。 编译运行工程,部署执行
    发表于 08-02 15:02

    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—Qt工程编译说明

    本文档主要说明如何将已有Qt工程进行编译,生成可在评估板上正常运行ARMQt程序镜像。
    的头像 发表于 07-28 10:10 490次阅读
    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—<b class='flag-5'>Qt</b>工程编译说明

    高效开发 | 瑞迅基于瑞芯微系列主板QT移植部署(上)

    嵌入式开发的浪潮中,RK3568平台以其强劲性能成为诸多领域的宠儿,而QT凭借出色的跨平台特性和丰富功能,是界面开发的利器。将QT5移植到RK3568平台的深度融合,是嵌入式硬件标准
    的头像 发表于 07-11 15:39 799次阅读
    高效开发 | 瑞迅基于瑞芯微系列主板<b class='flag-5'>QT</b>移植部署(上)

    嵌入式软件开发常用的软件有哪些?

    软件功能。 2. Visual Studio 简称VS: 它是一IDE,集成开发环境。验证C程序或是进行c#程序开发,可以用它。一些与嵌入式相关的模拟器也是基于VS的。帮助开发人
    发表于 07-03 17:06

    全志T536 4核A55 ARM+RISC-V+NPU 17路UART 工业开发板—Qt工程编译说明

    本文主要说明如何将已有Qt工程进行编译,生成可在评估板上正常运行ARMQt程序镜像。
    的头像 发表于 06-09 16:56 1283次阅读
    全志T536 4核A55 <b class='flag-5'>ARM</b>+RISC-V+NPU 17路UART 工业开发板—<b class='flag-5'>Qt</b>工程编译说明

    【技术案例】Qt 环境部署 - Ubuntu 篇

    什么是QtQt是一跨平台C++图形用户界面应用程序开发框架,可构建高性能的桌面、移动及Web应用程序,也可用于开发非GUI
    的头像 发表于 04-16 17:17 1445次阅读
    【技术案例】<b class='flag-5'>Qt</b> 环境部署 - Ubuntu 篇

    ElfBoard技术贴|如何在ELF 1开发板上交叉移植Qt

    嵌入式系统开发领域,针对特定硬件平台进行Qt框架的移植与适配是一项关键技术任务。作为业界主流的跨平台应用开发框架,Qt凭借其完善的图形界面支持能力,在嵌入式开发图形界面应用
    的头像 发表于 02-24 16:18 1039次阅读
    ElfBoard技术贴|如何在ELF <b class='flag-5'>1</b>开发板上交叉移植<b class='flag-5'>Qt</b>

    基于QT开发国产主板终端桌面程序 高效、稳定、跨平台的解决方案

    了开发者们面临的一重要挑战。本文将介绍如何基于QT框架,开发适用于国产主板的终端桌面程序探讨其优势和应用场景。 QT是一
    的头像 发表于 01-08 15:34 1443次阅读

    【飞凌嵌入式OK3588J-C开发板体验】OK3588J-C开发板的QT环境安装

    上面安装使用。而且在QT5以后,如果使用QT嵌入式版本进行开发商业性项目很有可能是必须要支付授权费用的,而如果使用Desktop进行开发的话还是可以一句LGPL进行继续使用的。 然后我们点击
    发表于 12-28 18:20

    新手怎么学嵌入式?

    嵌入式系统的发展,嵌入式操作系统也变得越来越重要。学习嵌入式操作系统可以帮助你更好地管理嵌入式系统中的资源和任务。了解操作系统的任务调度、内存管理等功能,
    发表于 12-12 10:51