当前位置: 首页 > article >正文

Linux上位机开发实战(qt编译之谜)

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

        很多同学都喜欢用IDE,也能理解。因为不管是visual studio qt插件,还是qt creator其实都帮我们做了很多额外的工作。这里面最重要的部分,就是利用uic、moc和rcc命令帮我们生成了额外的h文件、moc cpp文件、qrc cpp文件。换句话说,这些操作对我们来说都是透明的。但只要我们了解清楚了里面的原理,就会发现其实就是那么回事。

1、uic命令

        我们都知道,qt的图形界面就是ui文件。ui文件一般用qt designer生成。那么ui文件怎么和具体的class绑定在一起呢?方法就在uic工具,一般用uic可以直接生成h头文件,类似于这样,

uic QtWidgetsApplication.ui -o ui_QtWidgetsApplication.h

        有了这个ui_QtWidgetsApplication.h头文件之后,我们就可以在QtWidgetsApplication.h里面自由使用ui对象里面的控件了,

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication.h"class QtWidgetsApplication : public QMainWindow
{Q_OBJECTpublic:QtWidgetsApplication(QWidget *parent = nullptr);~QtWidgetsApplication();private:Ui::QtWidgetsApplicationClass ui;
};

2、moc命令

        刚才分析QtWidgetsApplication类的时候,不知道大家有没有注意,这里面还包含了一个Q_OBJECT宏。通过这个宏以及moc命令,qt就可以帮我们生成额外的cpp代码。例如,我们使用qt的时候很方便,直接把控件和slot槽函数做一个connect就可以了。但是具体怎么调用的,其实是moc自动生成的cpp文件来完成的,

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/QtCoremoc_QtWidgetsApplication.o : moc_QtWidgetsApplication.cppg++ -g -c moc_QtWidgetsApplication.cpp -o moc_QtWidgetsApplication.o $(INCLUDE_DIR)moc_QtWidgetsApplication.cpp : QtWidgetsApplication.hmoc -o moc_QtWidgetsApplication.cpp QtWidgetsApplication.h

        生成的moc_QtWidgetsApplication.cpp最终也要链接到可执行文件里面去的。

3、rcc命令

        除了上面说的ui文件、Q_OBJECT宏处理,还有一种qrc文件也需要进行处理。这种qrc文件,类似于原来windows系统里面的rc资源文件。qt一般是通过rcc命令,把它变成cpp文件来处理。这样就可以同样链接到最终可执行文件中去了。

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/QtCoreobj/qrc_QtWidgetsApplication.o: qrc_QtWidgetsApplication.cppg++ -c -g qrc_QtWidgetsApplication.cpp -o obj/qrc_QtWidgetsApplication.o $(INCLUDE_DIR)qrc_QtWidgetsApplication.cpp:rcc  QtWidgetsApplication.qrc -o qrc_QtWidgetsApplication.cpp

4、总结

        qt程序的编译,其实没有脱离常见的编译法则,比如编译、链接、静态库、动态库、可执行文件。只是很多操作都被隐藏掉了,比如这里说的uic、moc、rcc命令。我们常用的visual studio qt插件,或者是qt creator,都默认帮我们做了这些工作,这才导致我们并不是很清楚qt的编译原理。等到明白过来之后,其实就可以自由地编写Makefile,自由地去组织文件的编译和生成了。

相关文章:

Linux上位机开发实战(qt编译之谜)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很多同学都喜欢用IDE&#xff0c;也能理解。因为不管是visual studio qt插件&#xff0c;还是qt creator其实都帮我们做了很多额外的工作。这里面最…...

【人工智能】【Python】在Scikit-Learn中使用网格搜索对决策树调参

这次实践课最大收获非网格搜索莫属。 # 导入包 import matplotlib.pyplot as plt import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split, GridSearchCV # 网格搜索 from sklearn.tree import DecisionTreeClassi…...

用Python代码生成批量下单json

需求 根据以下json体&#xff0c;生成230OrderList对象生成10位有序的数字字母随机数赋值给OrderDetailList.ApiOrderId 和 OrderDetailList.Traceid生成的Json文件 保存在项目JSON目录中 {"UAccount": "xxxx","Password": "","…...

笔记:代码随想录算法训练营day56:图论理论基础、深搜理论基础、98. 所有可达路径、广搜理论基础

学习资料&#xff1a;代码随想录 连通图是给无向图的定义&#xff0c;强连通图是给有向图的定义 朴素存储&#xff1a;二维数组 邻接矩阵 邻接表&#xff1a;list基础知识&#xff1a;C 容器类 <list> | 菜鸟教程 深搜是沿着一个方向搜到头再不断回溯&#xff0c;转…...

Elasticsearch8.17 集群常见问题排查与解决

一、磁盘水位错误(Flood-Stage Watermark) 当数据节点磁盘空间极度不足并达到洪水阶段水位时,系统会记录以下错误: Error: disk usage exceeded flood-stage watermark, index has read-only-allow-delete block。 为防止磁盘写满,Elasticsearch 会阻止对受影响节点上分片…...

TCP、UDP协议的应用、ServerSocket和Socket、DatagramSocket和DatagramPacket

DAY13.1 Java核心基础 TCP协议 TCP 协议是面向连接的运算层协议&#xff0c;比较复杂&#xff0c;应用程序在使用TCP协议之前必须建立连接&#xff0c;才能传输数据&#xff0c;数据传输完毕之后需要释放连接 就好比现实生活中的打电话&#xff0c;首先确保电话打通了才能进…...

配置VMware Workstation中Ubuntu虚拟机与Windows主机的剪贴板共享功能

步骤1&#xff1a;安装或更新VMware Tools组件‌ ‌卸载旧版本工具&#xff08;可选&#xff09;‌ 若已安装旧版工具&#xff0c;建议先卸载&#xff1a; sudo apt-get autoremove open-vm-tools‌安装必需组件‌ sudo apt-get updatesudo apt-get install open-vm-tools o…...

深入理解Python闭包与递归:原理、应用与实践

目录 闭包 什么是闭包&#xff1a; 闭包的基本结构&#xff1a; 实现闭包的条件&#xff1a; 1.嵌套函数 2.内函数引用外部函数的变量 3.外部函数返回内部函数 4.外部函数已经执行完毕 递归函数 什么是递归函数&#xff1a; 递归函数条件 1.必须有个明确的结束条…...

第7章:Docker容器网络模型深度剖析

第7章:Docker容器网络模型深度剖析 作者:DogDog_Shuai 阅读时间:约30分钟 难度:高级 目录 1. 引言2. Docker网络架构3. Docker网络模式详解4. Docker网络配置5. Docker网络故障排查6. 总结1. 引言 Do...

SeaCMS代码审计

漏洞描述 漏洞分析 根据漏洞描述定位漏洞代码 当actionsaveCus或者save时&#xff0c;可以进行一个文件写入&#xff0c;不过文件类型被进行了限制&#xff0c;只有html,htm,js,txt,css 虽然这里并不能写入php文件&#xff0c;但是当actionadd或者custom时&#xff0c;这里进行…...

好看的网络安全登录页面 vue http网络安全

一、http协议 http协议是一种网络传输协议&#xff0c;规定了浏览器和服务器之间的通信方式。位于网络模型中的应用层。&#xff08;盗图小灰。ヾ(◍∇◍)&#xff89;&#xff9e;&#xff09; 但是&#xff0c;它的信息传输全部是以明文方式&#xff0c;不够安全&#xff0c;…...

springmvc中如何自定义入参注解并自动注入值

在Spring中&#xff0c;HandlerMethodArgumentResolver 是一个非常强大的接口&#xff0c;用于自定义控制器方法参数的解析逻辑。以下是一个完整的示例&#xff0c;展示如何使用 HandlerMethodArgumentResolver 并结合自定义注解来实现特定的参数解析逻辑。 ### **1. 定义自定…...

目标检测——清洗数据

清洗VOC格式数据集代码示例 import os import xml.etree.ElementTree as ETdef process_annotations(image_folder, annotation_folder):# 遍历标签文件夹中的所有XML文件for xml_file in os.listdir(annotation_folder):if not xml_file.endswith(.xml):continuexml_path os…...

numpy学习笔记7:np.dot(a, b) 详细解释

numpy学习笔记7&#xff1a;np.dot(a, b) 详细解释 np.dot(a, b) 函数详解 np.dot(a, b) 是 NumPy 中用于计算两个数组的点积或矩阵乘法的核心函数。其行为根据输入数组的维度不同而变化&#xff0c;以下是详细说明&#xff1a; 1. 输入为两个一维数组&#xff08;向量&#…...

Unity--GPT-SoVITS接入、处理GPTAPI的SSE响应流

GPT-SoVITS GPT-SoVITS- v2&#xff08;v3也可以&#xff0c;两者对模型文件具有兼容&#xff09; 点击后 会进入新的游览器网页 ----- 看了一圈&#xff0c;发现主要问题集中在模型的训练很需要CPU&#xff0c;也就是模型的制作上&#xff0c;问题很多&#xff0c;如果有现有…...

Django初窥门径-Django REST Framework 基础使用

前言 在现代 Web 开发中,构建高效、安全且易于维护的 API 至关重要。Django REST framework(简称 DRF)作为 Django 生态中的强大工具,为开发者提供了创建 RESTful API 所需的完整解决方案。本文将详细介绍如何使用 Django 和 DRF 构建一个用户管理 API,涵盖环境配置、序列…...

LoRA中黑塞矩阵、Fisher信息矩阵是什么

LoRA中黑塞矩阵、Fisher信息矩阵是什么 1. 三者的核心概念 黑塞矩阵(Hessian) 二阶导数矩阵,用于优化问题中判断函数的凸性(如牛顿法),或计算参数更新方向(如拟牛顿法)。 Fisher信息矩阵(Fisher Information Matrix, FIM) 统计学中衡量参数估计的不确定性,反映数据…...

Redis哈希槽机制的实现

Redis哈希槽机制的实现 Redis集群使用哈希槽&#xff08;Hash Slot&#xff09;来管理数据分布&#xff0c;整个集群被划分为固定的16384个哈希槽。当我们在集群中存储一个键时&#xff0c;Redis会先对键进行哈希运算&#xff0c;得到一个哈希值。然后&#xff0c;Redis将该哈…...

docker pull 提示timeout

通过命令行拉取对应的mysql版本提示网络超时。 开始排查&#xff0c;首先确认是否能浏览器访问。ok的&#xff0c;可以正常访问。 终端curl 排查嗯 有问题 改了下 终端 vim ~/.zshrc 加入 export HTTP_PROXY"http://127.0.0.1:7890" export HTTPS_PROXY"…...

(超详细) ETL工具之Kettle

Kettle简介 kettle最早是一个开源的ETL工具&#xff0c;后命名为Pentaho Data Integration。由JAVA开发&#xff0c;支持跨平台运行&#xff0c;其特性包括&#xff1a;支持100%无编码、拖拽方式开发ETL数据管道&#xff0c;可对接包括传统数据库、文件、大数据平台、接口、流…...

Android第三次面试总结(网络篇)

在计算机网络领域&#xff0c;网络模型是理解通信原理的基础框架。本文将详细解析 OSI 参考模型和 TCP/IP 模型的分层结构、核心功能及实际应用&#xff0c;并通过对比帮助读者建立完整的知识体系。 一、OSI 参考模型&#xff1a;七层架构的理论基石 OSI&#xff08;开放系统…...

国产编辑器EverEdit - Hex Dump插件:看到文本的另一面!

1 Hex Dump插件 1.1 应用场景 有时可能需要显示字母的ASCII编码&#xff0c;或其他文字的字节编码&#xff0c;可以使用Hex Dump插件来完成 1.2 使用方法 安装Hex Dump插件&#xff0c;安装插件方法参考&#xff1a;扩展管理 在编辑器中选中文本&#xff0c;选择扩展 -> …...

random_masking 函数测试

文章目录 1. description2. excel3. pytorch code 1. description 功能&#xff1a;按一定比例的随机部分样本&#xff0c;简单来说就是按照一定的比例将行向量从小到大的顺序提取出来。思考1&#xff1a; 用了均匀分布&#xff0c;并且按照一定比例&#xff0c;取前prob概率来…...

TDengine 中的流式计算

简介 TDengine 中的流计算&#xff0c;功能相当于简化版的 FLINK &#xff0c; 具有实时计算&#xff0c;计算结果可以输出到超级表中存储&#xff0c;同时也可用于窗口预计算&#xff0c;加快查询速度。 创建流式计算 CREATE STREAM [IF NOT EXISTS] stream_name [stream_o…...

Java 大视界 -- Java 大数据在智慧交通自动驾驶仿真与测试数据处理中的应用(136)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

k8s中的组件

1.namespace Namespace 用于将集群资源划分为不同的逻辑组&#xff0c;方便管理和隔离 kubectl get namespace 查看所有逻辑组 kubectl describe namespace <namespace-name> 查看某个逻辑组信息详情 kubectl create namespace ... 创建逻辑组 kubectl delete names…...

JVM的一些知识

JVM简介 JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机&#xff1a;JVM、VMwave、Virtual Box。 JVM 和其他两个虚拟机的区别&#xff1a; VMw…...

【安全运营】用户与实体行为分析(UEBA)浅析

目录 用户与实体行为分析&#xff08;UEBA&#xff09;简介一、UEBA的核心概念1. 行为基线建立2. 异常检测3. 风险评分4. 上下文关联 二、UEBA的应用场景1. 内部威胁检测2. 外部威胁应对3. 合规性和审计支持 三、UEBA的技术实现1. 大数据技术2. 机器学习算法3. 可视化工具 四、…...

sql小记,20250319

ps:基于sqlserver 一、绩效管理系统表设计 1.表设计 Users用户表&#xff1a;包含id&#xff0c;用户名&#xff0c;密码。 AppraisalBases评价(职位基数)表&#xff1a;包含职位id&#xff0c;职位年终奖基数 AppraisalCoeffcients评价系数表&#xff1a;包含类别id, 类别&…...

C语言每日一练——day_7

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第七天。&#xff08;连续更新中&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff09;是一种在编程竞赛中用…...