Qt5.14+CMake3.22+OpenCV4.5

发布时间 2023-04-21 17:44:45作者: cps666

原文地址 zhuanlan.zhihu.com

下载链接

首先需要下载对应的软件,下载链接和我选择的版本如下(仅作参考):

Qt

Index of /archive/qt/5.14/5.14.2qt-opensource-windows-x86-5.14.2.exe

CMake

Download | CMakecmake-3.23.0-windows-x86_64.msi

注意 x86指的是32位系统;x64指的是64位系统,根据自己电脑系统选择版本。

OpenCV

huihut/OpenCV-MinGW-Build,选择 OpenCV-MinGW-Build-OpenCV-4.5.2-x64

下载好后你就会有这三个文件,下面就开始安装吧。

安装 CMake

鉴于 Qt 官方都在抛弃 qmake,大力推广 CMake,作为紧跟时代潮流的我们,肯定不能反其道行之,果断选择 CMake 作为我们的项目构建工具。因为 Qt 编译代码需要用到 CMake,所以就先安装 CMake。

双击exe文件即可开始安装,我仅在需要特殊说明的地方进行截图,其他时候直接选择下一步即可。

然后一直下一步就可以完成安装,我们在安装过程中选择了将 CMake 自动添加到添加环境,所以安装完后不用手动添加了。

安装好后来测试一下,打开cmd 控制台,输入cmake,显示 cmake 使用说明信息即为安装成功,如下图:

安装 Qt

同样双击 exe 文件开始安装,会要求输入账号和名称,没有就注册一个。

选择安装组件需要详细说一下,组件分为如下四部分。

对于编译环境,因为我使用 MinGW 编译器(Minimalist GNU for Windows), 所以选择 MinGW,如果是 VS 用户,需要根据自己的 Visual Studio 版本选择 MSVC。Qt 源码根据需要选择。Qt 第三方库建议除了 Script 外全选。

这里从别处摘抄的对于 MinGW 的介绍。

目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种,分别为 MinGW 和 Cygwin。其中,MinGW 侧重于服务 Windows 用户可以使用 GCC 编译环境,直接生成可运行 Windows 平台上的可执行程序,相比后者体积更小,使用更方便;而 Cygwin 则可以提供一个完整的 Linux 环境,借助它不仅可以在 Windows 平台上使用 GCC 编译器,理论上可以运行 Linux 平台上所有的程序。
如果读者仅需要在 Windows 平台上使用 GCC,可以使用 MinGW 或者 Cygwin;除此之外,如果读者还有更高的需求(例如运行 POSIX 应用程序),就只能选择安装 Cygwin。

然后一直下一步,直接安装即可,安装完成后打开 Qt Creator,我们看看能不能用。

创建项目

选择 文件 -> 新建项目,安装如下选择新创建一个项目

本篇文章只讲安装,对于很多Qt 内容就跳过了哈。

设置项目名称:

选择项目构建系统 CMake

选择类名,默认即可。

选择编译器,Qt 检测到我的电脑上有这两个编译器,提供我选择。

一直下一步完成创建。工程目录如下:

点击运行按钮,会弹出来一个空白窗口,说明 Qt 安装成功。

因为选择CMake 进行项目构建,所以会自动生成一个 CMakeLists 文件,看看它的内容是啥(已删除无关代码):

cmake_minimum_required(VERSION 3.5)

project(hello_world LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt5 COMPONENTS Widgets REQUIRED)

add_executable(hello_world
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
)

target_link_libraries(hello_world PRIVATE Qt5::Widgets)

Qt 自动帮我们构建了一个项目,比如加载文件,包含库链接等,后面安装 OpenCV 时需要修改这个文件。

安装 OpenCV

这里我偷懒了,本来需要需要 OpenCV 源码,然后用 CMake 进行编译。我就直接下载别人编译好的 OpenCV 库。

从名字可以看出来,这里仅适用 MinGW 编译器。

将 OpenCV 压缩包进行解压,然后手动将bin目录添加到环境变量PATH,方便程序在运行时能够找到对应的动态库。

然后修改一下CMakeLists 文件:

cmake_minimum_required(VERSION 3.5)

project(hello_world LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(OpenCV_DIR "D:/ProgramFiles/OpenCV-MinGW-Build-OpenCV-4.5.2-x64/x64/mingw/lib") # add line

find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(OpenCV REQUIRED) # add new line

include_directories(${OpenCV_INCLUDE_DIRS}) # add new line

add_executable(hello_world
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
)

target_link_libraries(hello_world PRIVATE Qt5::Widgets ${OpenCV_LIBS}) # modify line

做的相关修改已经通过注释标明,主要意思就是指定 OpenCV 文件夹,包含对应头文件,链接对应库,这样 CMake 进行构建时,就能找到 OpenCV 的相关函数。

注意,修改 CMakeLists 文件后,需要重新构建项目。

最后修改一下主函数如下:

#include "mainwindow.h"

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

void testOpenCV() {
    cv::Mat image = cv::imread("E:/code.png");
    cv::imshow("show", image);
    cv::waitKey(0);
}

int main(int argc, char *argv[])
{
    testOpenCV();
//    QApplication a(argc, argv);
//    MainWindow w;
//    w.show();
//    return a.exec();
} 

这样你就能看到你的 OpenCV 能在 Qt 中正常使用啦。