上位机图像处理和嵌入式模块部署(linux Qt程序的编译)

news2024/11/25 6:52:56

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        linux上位机写程序,大家都喜欢用designer设计界面,用qt creator编写程序。这样其实也无可厚非。但是从效率和快速开发的角度来说,这么做其实是没有必要的。我们完全可以通过自己的方法来实现一个比较好的开发环境。今天,就来简单讨论下,如果是用于嵌入式linux qt界面开发,怎么开发和编译比较好。

1、传统的qt creator开发

        传统的方式,也是qt本身推荐的方式,那就是借助于qt creator来进行处理。本质上它就是一个IDE,既可以设计界面,也可以开发代码。但是从可用性和复用性来说,个人感觉价值不是很高。为了开发qt记住的那些技巧,在开发其他软件的时候完全派不上用场。

2、借助于命令行进行开发

        在嵌入式卡片电脑上面,如果准备好了qt的运行环境,其实是可以在widnows上面准备好文件之后,直接在卡片电脑上编译运行的。我们还知道,qt一般依赖于这么几个命令,

        (1)uic命令,它的作用就是把ui文件翻译成头文件;

        (2)moc命令,它的作用就是提取头文件里面的Q_OBJECT信息,翻译成cpp文件;

        (3)头文件目录和动态库文件。

        所以,知道了这些之后,我们其实就可以自己写一个批处理文件,也是可以实现正常编译的,文件不多的情况下,效率还特别地高,

uic QtWidgetsApplication.ui -o ui_QtWidgetsApplication.h
moc -o  moc_QtWidgetsApplication.cpp QtWidgetsApplication.h
g++ main.cpp QtWidgetsApplication.cpp  moc_QtWidgetsApplication.cpp -o main -I /usr/include/aarch64-linux-gnu/qt5 -I /usr/include/aarch64-linux-gnu/qt5/QtWidgets -I /usr/include/aarch64-linux-gnu/qt5/QtGui -I /usr/include/aarch64-linux-gnu/qt5/QtCore -lQt5Widgets -lQt5Gui -lQt5Core

3、编写Makefile编译

        qt creator创建工程的时候,其实有一个pro文件,这个文件就是用来创建编译脚本的。既然是这样,我们也可以自己创建Makefile进行编译。和批处理文件相比较,它可以实现增量编译,这样我们每次编译的时候,只需要编译那个修改过的文件就好了,整体编译的效率也会更高。

        这个Makefile只要写一次就好了,后面把它当成模板,改一改就可以使用了。

.PHONY: all clean

INCLUDE_DIR=-I /usr/include/aarch64-linux-gnu/qt5 \
            -I /usr/include/aarch64-linux-gnu/qt5/QtWidgets\
            -I /usr/include/aarch64-linux-gnu/qt5/QtGui \
            -I /usr/include/aarch64-linux-gnu/qt5/QtCore

all: main

main: main.o QtWidgetsApplication.o moc_QtWidgetsApplication.o
	g++ -g $^ -o main -lQt5Widgets -lQt5Gui -lQt5Core

main.o: main.cpp QtWidgetsApplication.h
	g++ -g -c main.cpp -o main.o $(INCLUDE_DIR)

QtWidgetsApplication.o: QtWidgetsApplication.cpp QtWidgetsApplication.h
	g++ -g -c QtWidgetsApplication.cpp -o QtWidgetsApplication.o $(INCLUDE_DIR)

QtWidgetsApplication.h:ui_QtWidgetsApplication.h

ui_QtWidgetsApplication.h: QtWidgetsApplication.ui
	uic $^ -o ui_QtWidgetsApplication.h

moc_QtWidgetsApplication.o : moc_QtWidgetsApplication.cpp
	g++ -g -c moc_QtWidgetsApplication.cpp -o moc_QtWidgetsApplication.o $(INCLUDE_DIR)

moc_QtWidgetsApplication.cpp : QtWidgetsApplication.h
	moc -o moc_QtWidgetsApplication.cpp QtWidgetsApplication.h

clean:
	rm -rf main *.o ui_*.h moc_*.cpp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频智能分析工业排污检测算法及算法源码全套应用方案

工业排污检测算法在环境保护领域发挥着至关重要的作用,其主应用场景可以归纳如下: 应用场景 1、化工厂:监测化工厂的废气、废水排放情况,预防化学品泄漏污染环境。通过实时监测和数据分析,确保化工厂的排放符合环保标…

鸿蒙Harmony开发知识:Arkts函数

函数 函数声明 函数声明引入一个函数,包含其名称、参数列表、返回类型和函数体。 以下示例是一个简单的函数,包含两个string类型的参数,返回类型为string: function add(x: string, y: string): string {let z: string ${x} …

Xinstall:让App下载摆脱注册码的束缚,效率翻倍!

你是否曾经因为繁琐的注册码而放弃了某个App的下载?或者在安装过程中因为邀请码填写错误而功亏一篑?这些问题,相信很多人都曾遇到过。今天,我要为大家介绍一个神奇的品牌——Xinstall,它凭借强大的免注册码下载技术&am…

二叉树练习

1.认识树 树的根节点及其子树,都是相对的概念。在任何一棵树中都有一个根节点,而这棵树本身又可以是别的树的子树。树的基本概念有: A)双亲和孩子:一个节点的后继节点被称为该节点的孩子,该节点称为这些孩子的双亲。…

面试车载测试岗位,我们应该如何准备呢?

在进行车载测试方面的简历撰写以及面试时,我们需要注意的几点如下: 01、简历方面 1.没有相关项目怎么办? 要投递和面试的岗位所要参与的项目和做过的项目不可能是完全一样的。招聘企业更关注工作思路以及解决问题的思路。 不同的公司就算是做一样的项…

无人机:航拍书籍推荐

写在前面 学习航拍,整理一些书籍分享理解不足小伙伴帮忙指正 😃,生活加油 99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑,战胜那些心里空荡荡的时刻&…

JavaWeb基础 -- Servlet

JavaWeb基础 – Servlet 1.Servlet简介 1.1 Servlet是什么 Servlet本身是用Java编写的,运行在Web服务器上的应用程序,并作为Web浏览器和其他HTTP客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。Servlet可以收集来自网页表单输入的数据…

iOS 修改 tabbar 图标大小 01

0x00 transform 在点击 tabbar 时,通过修改图片的 transform 属性,来修改图片大小。 遍历 self.tabBar.subviews 来查找 图片。 imageView.transform CGAffineTransformScale(imageView.transform, 4, 4); 你会发现,根本改不动&#xff01…

CSS知识点详解:div盒子模型

盒子模型: 边框: border-color:边框颜色 border-width:边框粗细 1.thin 2.medium 3.thick 4.像素值 border-width:5px ; border-width:20px 2px; border-width:5px 1px 6px; border-width:1px 3px 5px 2px; 这个简写属性…

豆瓣评分9.0!Python3网络爬虫开发实战,堪称教学典范!

今天我们所处的时代是信息化时代,是数据驱动的人工智能时代。在人工智能、物联网时代,万物互联和物理世界的全面数字化使得人工智能可以基于这些数据产生优质的决策,从而对人类的生产生活产生巨大价值。 在这个以数据驱动为特征的时代&#…

Python导出所有已安装包及其版本信息

目录 导出导入 如果使用了虚拟环境,则先激活当前项目虚拟环境 venv\Scripts\activate导出 在当前目录下生成一个requirement.txt文件,记录当前环境的所有pyhton依赖包及其版本信息。 pip freeze > requirement.txt导入 pip install -r requiremen…

C语言手撕实战代码_循环单链表和循环双链表

C语言手撕实战代码_循环单链表和循环双链表 循环单链表习题1.建立带头结点的循环链表2.设计一个算法,将一个带有头结点的循环单链表中所有结点的链接方向逆转3.设计一个算法,将一个循环单链表左移k个结点4.设计一个算法将循环单链表中的结点p的直接前驱删除5.设计算…

如何使用 Higress 快速构建 AI 应用?

随着 AI 时代到来,基于大模型的应用对网关提出了新的要求,例如在不同 LLM 提供商之间进行负载均衡、构建 AI 应用的可观测能力、基于 token 的限流保护与配额管理、AI 应用内容安全等等。Higress 基于企业内外的丰富场景沉淀了众多面向AI的功能&#xff…

pip3 : 无法将“pip3”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

1.找到python安装目录底下的Scripts,复制该路径:你安装python的目录\Scripts 我本地的:D:\devSoftware\python-all\Python39\Scripts 2.将该路径配置到环境变量Path里面 我的电脑 - 右键属性 - 系统 - 环境变量 - 找到path点击编辑 - 新建&a…

家用超声波清洗机哪个品牌好用?实测解析四大高口碑超声波清洗机机型

提到超声波清洗机,很多人可能首先想到的是眼镜店或首饰店里的商用清洗设备。它们虽然功能强大,但价格较高且体积较大,并不适合家用。不过,现在有了一个更方便的选择:小型超声波清洗机。它们体积小巧,价格也…

9.cmake(string)

目录 1. 基本用法 2. string对于json的操作 3.代码段 1. 基本用法 以下通过截取字符串"begin test cmake string end "中的子串"test cmake string"来串联string中的部分用法,其中包括了FIND,LENGTH,SUBSTRING&#x…

linux搭建ceph集群

linux三节点搭建ceph集群 主机IP主机名称172.26.50.75node1172.26.50.112node2172.26.50.228node3 ceph-mon,ceph-mgr,ceph-mds都搭建在node1上,node2和node3上搭建ceph-osd,每个机器1个osd Ceph是一个分布式的存储系统&#x…

选择排序(直接选择排序和堆排序)

一、直接选择排序 1.基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 2.动图展示 3.思路讲解 ①在元素集合array[i]—array[n-1]中选择关键码最大&…

个人博客系统-自动化测试

1、项目背景 1.1技术背景 1)个人博客系统主要是通过前端(HTMLcssjs)后端(SpringBoot)实现的一个博客的基本功能。前端通过jQuery的方式向后端请求数据。后端通过MyBatis从数据库中查询数据响应给前端。 2&#xff0…

天通报警呼叫柱助力宜宾——破汛期河心洲岛通信困境,守护人民群众生命安全

随着主汛期的到来,我国多地遭遇频繁降雨,强降雨或连绵不断的降雨,极易引发山洪、滑坡、泥石流等次生灾害。8月18日23时至20日10时,辽宁省西部地区出现暴雨到大暴雨,葫芦岛市部分乡镇出现特大暴雨。受到强降雨影响&…