Qt6 与 opencv安装与编译问题汇总

安装Qt6

  1. 从官网下载qt,这里直接甩一个连接

qt6 官方下载地址https://www.qt.io/download-qt-installer-oss?hsCtaTracking=99d9dd4f-5681-48d2-b096-470725510d34%7C074ddad0-fdef-4e53-8aa8-5e8a876d6ab4

剩下的就是正常的安装了,都是傻瓜式安装,倒也没有什么好说的,这里需要注意的一点就是,如果是在windows环境下使用qt,编译器最好选择msvc,这样的话,对于后面安装编译安装opencv也更方便

最开始接触到opencv时,是使用的msvc,但是qt中用的是MinGW 编译的时候各种报错,排查问题花了好久,这个后面再说

  1. 创建一个项目验证一下QT基础安装

不同系统下创建略有不同,其实不必在意,具体等实操时自会体现。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这里推荐使用qmake,后期的各种环境依赖更好调整,其实各个方法差别不大有兴趣可以研究一下剩下两个部分
在这里插入图片描述

在这里插入图片描述

注意: 这里选择的套件是msvc2019 因为使用的是qt6 要求支持c++17 msvc17 是没办法全面支持的,因此,选择更低版本可能会导致项目编译报错
在这里插入图片描述

点击完成就行了
在这里插入图片描述

创建好以后就可以看到这个界面了,其实这里多了一个opencv的目录结构,暂时先不用关注,我这是在pro文件中包含了这个东西。
在这里插入图片描述

点击执行就行了,这里应该会看到能直接跳出来一个空白界面,我这里增加了一个lable。不重要
在这里插入图片描述

在这里插入图片描述

在qt的编译过程中应该不会有什么别的问题,相对来讲还是比较简单的。

opencv 库编译

opencv库的编译是依赖于cmake环境的,当然,在linux环境下安装cmake 然后增加各种cmeke编译选项会很方便,但是这里为了简化上手难度,主要是用macos或者windows环境下的CMakeUI进行编译,

  1. 首先在cmake官网下载cmakeui。
    https://cmake.org/download/

我这里使用Windows环境,主要是受众比较多,Mac跟windows使用区别不大。

这是打开了CMake UI的界面,我这里是直接把opencv的库添加进去了,暂时忽略
在这里插入图片描述

  1. 好了,现在开始下载opencv。这里如果去opencv官网下载的话,看之前的资料 官网是给了一套编译好的代码的,并且现在官网也给提供了一个exe文件,我下载了,点击安装之后发现内容不全,不方便后续使用,建议直接编译,直接从github库里下载代码就行了,官网也是直接甩的github连接。
    https://github.com/opencv/opencv/releases

下载之后直接解压出来就行了。我这里还创建了一个build文件,后续构建的目录就放在这里。
在这里插入图片描述

还是回到这里
在这里插入图片描述

点击configure 会让你选择一个构建器,这里选择msvc
在这里插入图片描述

点击finish之后会有一些告警信息,暂时先不用关心 等待编译结束
在这里插入图片描述

第一次构建结束之后就可以看到下面这个界面了

在这里插入图片描述
这里需要说明的是,现在最好选中 opencv_world. 这个东西就是为了将opencv打包成一个库使用,

在这里插入图片描述

选中之后再次点击 configure, 然后点击generate就行了
在这里插入图片描述

这时候你会在 刚刚创建的build目录下面看到这个文件
在这里插入图片描述

熟悉vs的同学应该很清楚,这是vs的工程文件,点击打开

选中生成。批生成,选中 INSTALL , ALL_BUILD。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后你就需要等待,这样一个可以在windows环境下使用的 opencv库就能使用了

这时候创建一个文件, 文件后缀叫做.pri 这个文件就作为qt项目的外部依赖配置文件使用了,还记得前面要求使用qmake 去创建qt项目吗 就是为了这里能够更加方便的增加这个外部库,CMake虽然也能,但没有那么方便,具体pri文件怎么写, 后面章节说明。

QT 与 opencv

好了,现在我们qt项目已经创建成功了, opencv也编译好了,那么剩下的就是搞一个样例程序了,这里就简单的写写,主要目的是为了让opencv 能够在qt里用起来, 更多细节还得后面学习

  1. pri文件书写
    因为创建的qt项目通过qmak管理,在项目创建之初会创建一个pro文件,这里可以在qt creator中看到,暂时先不用管他具体每一句细节是什么。这里首先说明一下pri文件

pri文件在qmake中类似于设备树插件中的 dts和dtbs文件之间的关系,在pro文件中,增加
include(path) 就可以增加pri文件,

pri文件中,只需要增加includepath, dependpath, LIBS文件,指明文件路径就可以了。下面是我创建项目中的pro文件以及pri文件 样例

pri

INCLUDEPATH += D:/lib/include
DEPENDPATH += D:/lib/include
Debug:{
    LIBS += -lD:/lib/x64/vc17/lib/opencv_world4100d
}
Release:{
    LIBS += -lD:/lib/x64/vc17/lib/opencv_world4100
}

其实在前面编译好opencv文件之后忘记说明了,在使用vs生成好项目之后,所有的文件会在install文件下面, dll文件会在 x86/vc17/bin目录下, lib文件会在 x86/vc17/lib目录下, 我这里是吧install目录拷贝出来了,免的使用的路径太长了。

这里编写的pri文件都是使用的 ‘/’作为路径分隔符,与windows环境下的常用习惯不一致,因为qt支持跨平台,所以这里所有的路径分隔符都应该使用 ‘/’ 而不是’'。

这里还需要额外说明的是, 在pri文件中,除了includepath字段之外,还应该添加dependpath,不然的话,在编译阶段会找不到头文件,这种情况在linux环境下以及mac环境都没有出现,具体原因我也说不好,我参考的教材中,没有使用dependpath这个配置选项,导致一直报错,就很烦。下面是 AI给出的答案
在 Qt 项目配置中,INCLUDEPATHDEPENDPATH 是两个不同的变量,它们的作用和使用场景有所不同。
INCLUDEPATH
INCLUDEPATH 用于指定编译器在编译过程中查找头文件的路径。当你在代码中使用 #include 指令包含头文件时,编译器会根据 INCLUDEPATH 中指定的路径来查找这些头文件。
例如:
INCLUDEPATH += D:/lib/include
这告诉编译器在 D:/lib/include 目录下查找头文件。
DEPENDPATH
DEPENDPATH 用于指定 qmake 在生成 Makefile 时查找依赖文件的路径。虽然 DEPENDPATHINCLUDEPATH 在某些情况下可以设置为相同的路径,但它们的主要用途不同。DEPENDPATH 主要用于 qmake 在处理依赖关系时查找相关文件。
通常情况下,DEPENDPATH 可以省略,因为 qmake 会自动根据 INCLUDEPATH 来处理依赖关系。然而,在某些复杂的项目中,可能需要显式地设置 DEPENDPATH 来确保 qmake 能够正确处理依赖关系。
结论:
通常情况下,INCLUDEPATH 是必需的,而 DEPENDPATH 可以省略。在大多数情况下,INCLUDEPATH 足以确保编译器和 qmake 正确处理头文件和依赖关系。如果你的项目没有特殊需求,可以只设置 INCLUDEPATH

pro

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

# 在这里手动添加pri文件就行了
include (D:/lib/opencv.pri)

修改过pro文件之后, 应该就能在项目目录中看到增加了opencv的配置目录,这个是qt creator自动添加的。

在这里插入图片描述

写个代码验证一下, 就是在qt创建的默认mian文件里增加了几行代码,作用就是打开一个图片,并且展示出来,

#include "mainwindow.h"

#include <QApplication>
#include <opencv2/opencv.hpp>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv); 
    cv::Mat image = cv::imread("D:/QTProject/1.png");

    cv::imshow("Output", image); 
    MainWindow w; 
    w.show(); 
    return a.exec(); 
}

在这里插入图片描述

我在最开始创建好项目的时候,直接执行也是可以执行的,后来不知道为什么,突然就不能访问 appData 目录了,现在找不到对应的截图了,如果遇到temp main.odj 无法写入的情况,可以调整环境变量中的temp与tmp文件目录,即可解决。

补充说明一下关于MinGW与MSVC的问题,这里使用 MSVC 的主要原因是,使用MinGW编译qt的话,MSVC编译的OPENCV库就不能使用了,老是报错连接不到动态库,但是,使用MinGW编译OPENCV会非常非常麻烦,我花了两天时间也没搞定,各种环境依赖需要去解决,所以非常不建议折腾,Mac与linux 就用 Unix Makefiles就行了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

望晓天

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

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

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

打赏作者

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

抵扣说明:

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

余额充值