QT Qmake笔记

news2025/1/23 23:16:29

文章目录

  • 概述
  • QT修改样式
  • qmake
    • 概述
      • pro文件常见配置项
    • 库引用和库路径指定
    • QT创建动态库和使用(重要)
      • 小例子
        • 写动态库
        • 用动态库
  • 参考资料
  • 附录

概述

本文记录一些学习QT过程中的笔记。

QT修改样式

styleSheet:

background-image:url("/home/orbbec/Pictures/explore-share-image-1280x720.png")
在这里插入图片描述

qmake

概述

可以通过qmake命令,编译pro文件来生成Makefile。
Makefile保存了编译器和链接器的参数选项,以及所有源文件之间的关系。

具体命令为:

 qmake "CONFIG += AAA BBB CCC" xxx.pro -o Makefile

xxx.pro文件的内容可以是:

CONFIG += staticlib
DEFINES += DDD_FUNC
 
# CONFIG 变量的所有值都可以直接用作条件语句的条件  !!!!!!!
 
AAA {
    DEFINES += AAA_FUNC    # 有这个CONFIG参数,所以会执行这条语句
}
 
DDD {
    DEFINES += DDD_FUNC    # 没这个CONFIG参数,所以不会执行这条语句
}

pro文件常见配置项

  1. headers: 指定项目的头文件
  2. sources: 指定项目的C++文件
  3. forms: 指定需要uic处理的由qt designer生成的ui文件
  4. resources:指定需要rcc处理的.qrc文件
  5. defines: 指定预定义的C++预处理器符号
  6. includepath: 指定C++编译器搜索全局头文件的路径
  7. libs: 指定工程要链接的库
  8. config: 各种用于工程配置和编译的参数
  9. qt: 指定工程所要使用的QT模板
  10. target:指定可执行文件的基本文件名
  11. destdir: 指定可执行文件放置的目录

参考链接

库引用和库路径指定

  • $$PWD 是项目的当前路径;

  • LIBS += -L "../../lib" -lopencv_world320

    • -L 设置库的路径;
    • -l 指定库的名字
  • 需要指定INCLUDEPATH以及DESTDIR。

QT += widgets
message($$PWD)
INCLUDEPATH += $$PWD/../../include
LIBS += -L ../../lib -lopencv_world320

SOURCES += main.cpp
CONFIG += console
DESTDIR += ../../bin
TARGET = testq # 输出文件名

库链接:
参考链接:https://blog.csdn.net/Marryvivien/article/details/41345281
(注:笔记自用,若侵权则立即删除)
假定目录结构为:
在这里插入图片描述
那么如果想要在main.cpp文件中使用这第三方库的话,就必须要做以下几件事情:
1. 指定头文件路径;
2. 指定库路径;
3. 指定库名字。

具体地,在.pro文件中添加以下语句:

  1. INCLUDEPATH += 3rdparty/CatWhisperer/include
  2. LIBS += -L"3rdparty/CatWhisperer/lib" -lCatWhisperer
    • -L 指定lib路径,-l指定使用的lib名称。注意,不必要指定.lib扩展名。

此外,如果想要指定目标文件夹,那么可以在.pro文件中添加:

DESTDIR = bin
TARGET = testq # 输出文件名

QT创建动态库和使用(重要)

  • TEMPLATE = lib
  • 静态库 CONFIG += staticlib

CONFIG()函数。可以用来控制编译不同的版本,debug版本和release版本。如果是debug版本则TARGET = libdll_d, 否则则是libdll. 类似于一个if 判断。

CONFIG(debug,debug|release){
    TARGET = libdll_d
}else{
    TARGET = libdll
}

想要独立构建一个桌面级别的应用,构建动态库和对其进行使用是必备技能。

在QT creator中,新建一个库后,会得到三个文件,文件结构如下图所示:
在这里插入图片描述
其中,vision3d是我自己起的项目名称,而vision3d_global.h头文件中所包含的则是动态库对外接口的宏定义
在这里插入图片描述
此外,vision3d.h则是对外的接口文件,动态库中需要被调用到的接口,都在这个文件中。

小例子

写动态库

通常来说,我们使用的算法都是以库的形式交给开发或其他的人,那么,正常算法工作的编码实际上就是在vision3d.h 以及vision3d.cpp中来实现的。
随便写一个测试函数,进行“构建”(build,或者快捷键 ctrl + B)后,可以在以下路径内,看到.so文件的生成:
在这里插入图片描述
在这里插入图片描述

当然,在windows下,编译的就是dll文件了。

用动态库

随便新建一个控制台项目或者界面项目。
要使用动态库,我们要做的最关键的事情就是,修改pro文件,添加include目录和so文件目录
在这里插入图片描述
参考资料:
https://blog.csdn.net/qq_27278957/article/details/95945638

当然,也可以直接在qpro文件中右键“添加库”,然后添加“外部库”,指定include目录以及库目录即可。

然而,居然存在找不到库的情况,即使将库复制到.o文件同路径也无法找到,在这种情况下,亲测将库的路径加入到LD_LIBRARY_PATH中会可行
在这里插入图片描述参考链接为:https://blog.csdn.net/weixin_45261340/article/details/124967459?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-124967459-blog-86527301.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-124967459-blog-86527301.pc_relevant_default&utm_relevant_index=2

参考资料

  1. B站视频教程:https://www.bilibili.com/video/BV1ZR4y1w7iy/?spm_id_from=333.788.recommend_more_video.0
  2. csdn-在一个窗口中显示三维模型: https://blog.csdn.net/GeomasterYi/article/details/107132140
  3. QT 打包发布程序
  4. youtube QT&openGL 教程
  5. qmake: https://blog.csdn.net/chenyingboo/article/details/122354902

附录

  1. QT提升为?

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

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

相关文章

大学生转行,毕业一年半,她是如何从工地走向互联网的?

如果专业与工作不匹配?如果觉得现有工作不适合自己?如果想转行?可以看一下她的成长故事。 领英18年数据显示,职场人第一份工作在职时间显著缩短,70后平均超过4年换一次工作,80后是3年半,90后是…

Bitmap64为什么比bitmap32慢

https://www.bilibili.com/video/BV1vU4y1q7KR/?spm_id_from333.788&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf 原因跟 RoaringBitmap64 的实现有关,RoaringBitmap64 是由一系列 RoaringBitmap32 表示。实现方式有很多种,一种比较通用的做法用 ma…

【MyBatis】MyBatis Plus的使用

1.Mybatis-Plus 1.1 简介 MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。 官网文档地址:   https://mp.baomidou.com/guide/ MyBatis-Plus 特性:  …

非科班出身转行IT难吗?好找工作吗?

大家都知道,IT行业是出了名的高薪行业,很多传统行业/专业的小伙伴由于薪资低、就业机会少而有了想转行IT的想法。 他们通常有以下几个问题: 非计算机专业0基础能学会技术吗?非计算机专业如何转行到IT行业?非计算机专…

记录--可视化大屏-用threejs撸一个3d中国地图

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 不想看繁琐步骤的,可以直接去github下载项目,如果可以顺便来个star哈哈 本项目使用vue-cli创建,但不影响使用,主要绘制都已封装成类 1、使用geoJson绘制…

Java并发系列源码分析(四)--StampedLock

简介 ReentrantReadWriteLock是一个悲观的可重入的读写锁,而StampedLock既支持悲观锁也支持乐观锁但不支持锁的重入, 在ReentrantReadWriteLock下如果多个线程同时获取读锁的时候,获取写锁的线程就会被挂起进行等待,在StampedLock乐观锁下如果有线程加了写锁,其它读线程可以获…

英语不好能不能学好python?试试我的方法就知道了

这是本文的目录前言一、交互环境与print输出(python编程常用单词)二、字符串操作(python编程常用单词)三、重复\替换\转换\原始字符串(python编程常用单词)四、去除\查询\计数(python编程常用单…

JavaWeb之Servelt学习01

目录 1.Servlet 1.1快速入门 1.2Servlet 执行原理 1.3Servlet执行方法 1.3.1Servlet中的生命周期方法 1.4注解配置 1.5.Servlet体系结构 1.6Servlet相关配置 1.Servlet 概念:运行在服务端的小程序 Servlet就是一个接口,定义了java类被浏览器访问到…

高速高精度半导体运动台设计(二)

高速高精运动平台的性能不仅与运动控制器、伺服驱动相关,也与电机本身的性能密切相关。如图 5-2 所示的运动平台采用了雅科贝思的直线电机,直接驱动负载,刚性高,响应快,同时选用了高性能多轴运动控制卡和 GTHD 系列高性…

【Java 数据结构】树和二叉树

篮球哥温馨提示:编程的同时不要忘记锻炼哦!一棵倒立过来的树. 目录 1、什么是树? 1.1 简单认识树 1.2 树的概念 1.3 树的表示形式 2、二叉树 2.1 二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树性质相关习题 3、实…

uniapp 多商品sku组件v3版本

如果您正在寻找一款v3版本的多商品sku组件的话,那我想这款组件刚好可以满足各位。 先来简单看一眼效果图: 看起来是不是还不错,如果我告诉你还可以设置主题色会不会显得更加惊艳些,只需要按照数组格式将rgb的颜色传递给组件,…

智慧医疗中人工智能的7大应用|数据标注

从药物研发到预测肾脏疾病,人工智能在智慧医疗领域应用广泛。 人工智能在许多医学领域和专业中的应用正在成为现实。人工智能、机器学习、自然语言处理和深度学习使智慧医疗利益相关者和医疗专业人员能够更快、更准确地明确智慧医疗需求和解决方案,并依…

【WPF绑定2】 ComboBox SelectedValue复杂数据类型绑定

前言 这次绑定是一次非常痛苦的经历,因为SelectedValue总是不能生效!我一度怀疑是wpf的Bug。其实还是自己没搞清楚。 在之前的一篇文章中: http://t.csdn.cn/A4W6Ahttp://t.csdn.cn/A4W6A我也写个ComboBox的绑定,但是当时没有指…

css实现两列/三列布局

文章目录css实现两列/三列布局两列布局三列布局css实现两列/三列布局 两列布局 第一种方式&#xff1a;浮动实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible"…

点击类化学试剂绿色固体ICG-TCO,取用时保持干燥的环境

一、试剂反应基团&#xff08;Reagent reaction group&#xff09;&#xff1a; 点击类化学试剂包括&#xff1a;DBCO、TCO、Tetrazine、Azide、Alkyne、Auxiliary reagents等。其中TCO又包含了与氨基反应的&#xff0c;与羧基反应的&#xff0c;与荧光素交联的&#xff0c;与…

非零基础自学Golang 第14章 反射 14.3 对结构体的反射操作

非零基础自学Golang 文章目录非零基础自学Golang第14章 反射14.3 对结构体的反射操作14.3.1 获取结构体成员类型14.3.2 获取结构体成员字段的值14.3.3 反射执行结构体方法第14章 反射 14.3 对结构体的反射操作 反射不仅可以获取普通类型变量的值&#xff0c;还可以获取结构体…

中钢矿院冲刺科创板:上半年营收4亿 拟募资5.54亿

雷递网 雷建平 12月20日中钢集团马鞍山矿山研究总院股份有限公司&#xff08;简称&#xff1a;“中钢矿院”&#xff09;日前递交招股书&#xff0c;准备在科创板上市。中钢矿院计划募资5.54亿元&#xff0c;其中&#xff0c;1.41亿元用于国家级研发平台研发能力提升与矿产资源…

Python图像处理【5】图像扭曲与逆扭曲详解

图像扭曲与逆扭曲详解0. 前言1. 使用 scikit-image warp() 函数执行图像变换1.1 scikit-image warp() 函数原理1.2 利用 warp() 函数实现图像变换2. 漩涡变换详解2.1 旋涡变换原理2.2 使用 scikit-image warp() 实现旋涡变换2.3 使用 scipy.ndimage 实现漩涡变换3. 使用 scikit…

如何抓住2023年技术创新的浪潮和趋势?

编辑 | 阿冒 设计 | 沐由千百年以来&#xff0c;技术的进步始终与人类社会的发展紧密相连&#xff0c;每一次重大的技术变革均对社会带来的深刻而持久的影响。最近半个世纪以来的表征&#xff0c;尤其明显。数字技术&#xff0c;正在以其“春风化雨”的姿态滋润着万物&#…