电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序
分 享
扫描二维码分享
嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序
Qt
linux
ARM
码农爱学习
关注
发布时间: 2022-02-23
丨
阅读: 672
上篇文章介绍了如何搭建在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之类的创建工程的流程类似,其软件界面如下: ![](https://cf05.ickimg.com/bbsimages/202202/74b3de07e20a01fb98b00a889d94a8d3.png) 创建工程,选择左上角菜单中的“文件”->"新建文件或项目",弹出如下窗口,然后默认选择Qt Widgets Application,然后右下加点击“Choose"按键: ![](https://cf05.ickimg.com/bbsimages/202202/66a1170d9e7ef0592a13d57590ade3ba.png) 出现选择项目工程的存放位置,然后再下一步: ![](https://cf05.ickimg.com/bbsimages/202202/7287311ff2fef183570d084dad055ac4.png) 这里会用到Visual Studio中的一些功能,默认即可,然后下一步: ![](https://cf05.ickimg.com/bbsimages/202202/39fda150ace2c3c8caaa173012fc81cd.png) 然后要选择类信息,基类里可选的有QMainWindow、QWidget和QDialog,这里我们选择QWidget。 下面还有一个”创建界面“的勾选框,那个是用来通过图形化的方式设计显示界面,本篇暂用不到,先取消勾选,然后点下一步 ![](https://cf05.ickimg.com/bbsimages/202202/23cedf6e511ac240cf89d99bf3ec34ca.png) 到这里,Qt工程就创建好了,点完成: ![](https://cf05.ickimg.com/bbsimages/202202/5db358873a767e5d06d47b246a89088d.png) 创建的Qt工程如下,主要包含4个文件: - clock.pro:Qt工程的配置文件 - main.cpp:主程序 - widget.cpp:窗口程序 - widget.h:窗口程序的头文件 ![](https://cf05.ickimg.com/bbsimages/202202/a7007104781817d098e0367e1417a65a.png) ## 1.2 代码编写(时钟程序) ### Widget的构造函数 ```c++ 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中最常用的**信号和槽**机制: ```c++ connect(timer, SIGNAL(timeout()), this, SLOT(update())); ``` **信号和槽**,简单的立即,就是信号SIGNAL出现后(1s定时器超时),触发槽SLOT函数执行(更新表盘的显示) ### 界面设计 时钟程序中的表盘,表针等,都是通过画图的方式实现的,具体的代码如下: ```c++ 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
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
码农爱学习
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交