QT & Qmake 笔记

概述

需要先安装osg,然后再编译安装osgQOpenGL的插件。
其中,osgQOpenGL是OSG嵌入到qt中的一种实现方式,换言之,能够支持QT的一个osg插件

QT 的安装

https://www.qt.io/offline-installers
在这里插入图片描述
可以直接安装QT的库以及IDE,也就是QT CREATOR。

安装的时候总是会卡在6%, 需要关掉有道词典词可以。
https://blog.csdn.net/FUHAILIANG_2015/article/details/122415845

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参数,所以不会执行这条语句
}

库引用和库路径指定

  • $$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

此外,使用 QMAKE_LFLAGS += -Wl,-rpath= 也应当是奏效的。

参考资料

  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

附录

_global.h

共享库中的_global.h文件通常包含一些宏定义和声明,用于指示该库需要暴露哪些功能以供外部使用。具体来说,这个文件可能包括以下内容:

可移植性的声明:例如常见操作系统的宏(如WIN32或LINUX)以及大小端模式的声明。

共享库导出声明:可被外部程序调用的函数、类等类型需要在编写时进行导出,而其他不需要导出的则应保持为局部实现。

预处理变量和条件编译块。

在使用该共享库时,通常需要进行以下步骤:
1.将该共享库的 .h 文件路径添加到 include 路径中,以便您的程序可以找到该库的头文件。
2.将该共享库的 .so 或 .dll 文件(即库本身)路径添加到链接器路径中,以便您的程序可以在运行时动态加载该库。
3.在程序中包含相应的头文件,以访问库提供的功能。
4.使用 -l 和 -L 参数将库链接到程序中。其中,-l 参数后跟的是库的名称,-L 参数后跟的是库所在的目录。

这些步骤通常在编译命令行或配置文件中完成,具体实现方式可能略有差异,例如 qmake、CMake 等构建工具的使用方式会有所不同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FLOWVERSE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值