RoboMaster视觉笔记Qt(三)CMake工程添加Qt界面

RoboMaster视觉笔记Qt(三)CMake工程添加Qt界面


本文工程下载界面:https://download.csdn.net/download/weixin_42089190/12473378

RM的代码很多都是CMake构建,并且没有上位机。想要给CMake工程添加Qt的界面,写一个上位机,主要是为了方便地调试参数:能够对代码中摄像头曝光、分辨率等各个参数进行控制,同时,代码运行的结果也能在上位机上绘制曲线生成更好理解的图表结果。

上交的工程用CMake构建的。可以直接用qt打开CMakeLists.txt这个文件,把Qt当做一个普通的IDE来使用。

添加qt的界面有两种方法。一种是在CMakeLists.txt中添加Qt的模块,仍然使用CMake构建工程。另一种是生成.pro文件,改为使用qmake构建整个工程。

在CMakeLists.txt的同级目录中使用命令qmake -project可以让qmake根据CMakeLists.txt生成.pro文件,但是不完全,会报错,需要debug。我暂时没有时间精力把咱们的工程再改成qmake的。大家有兴趣去鼓捣鼓捣吧。

今天只分享一下如何用CMake构建整个工程,同时能够使用Qt的各种库。通过已经写好的一个Demo来展示最少的步骤。

一 Demo文件树

│  CMakeLists.txt
│  main.cpp
│  mainwindow.cpp
│  mainwindow.h
│  mainwindow.ui
│  tree.txt
└─build
    └─构建工程生成的各种临时文件

在windows生成好看的文件树命令:tree /f >tree.txt把当前路径下的文件树保存在当前路径的tree.txt文件中,有需要的时候从txt文件中拷贝文件树。

二 CMakeLists.txt

在这个文件,需要加载Qt的各种库,以及Qt有别于标准C++的各种特性的翻译开关。

#设置CMake最小版本
cmake_minimum_required(VERSION 3.5)
#设置工程名
project (Qt_cmake)

#注意,在一个大工程里,这几个开关一定要尽量放在前面打开,否则有可能会报无法生成ui文件的错误
set(CMAKE_AUTOMOC ON)#自动翻译信号与槽
set(CMAKE_AUTORCC ON)#自动翻译资源文件为cpp文件
set(CMAKE_AUTOUIC ON)#自动翻译界面文件为cpp文件
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#注意,在一个大工程里,这几个开关一定要尽量放在前面打开,否则有可能会报无法生成ui文件的错误

set(CMAKE_PREFIX_PATH "~/Qt5.9.9/5.9.9/gcc_64/")#设置Qt库的路径,为了不在Qt creator这个软件中运行cmake,也能找到Qt的库。
find_package(Qt5 COMPONENTS Widgets Gui Core REQUIRED)
#将源代码生成可执行文件
add_executable(hello_cmake main.cpp mainwindow.cpp mainwindow.h mainwindow.ui)
#将qt库和可执行文件链接起来
target_link_libraries(hello_cmake Qt5::Core Qt5::Widgets Qt5::Gui)

#在这里,为目标链接了/usr/lib/x86_64-linux-gnu/libpthread.so
#如果不链接就会报错,因为代码中使用了线程,这是系统里的库,直接链接就行。不过令人纳闷的是上交代码没链接pthread也可以运行线程
#如果是用的.pro文件,则在里面加上LIBS+=/usr/lib/x86_64-linux-gnu/libpthread.so
target_link_libraries(hello_cmake pthread)

注意事项:

1.AUTOUIC等的开启尽量放在最前面,不然会报无法生成和无法找到ui_mainwindow.h的错

2.在13行,set(CMAKE_PREFIX_PATH “~/Qt5.9.9/5.9.9/gcc_64/”)

需要设置qt库的路径,和安装的位置有关系, 我将Qt5.9.9装在了~/下,这里需要更换一下。如果只是单纯想要在Qt里运行这个CMake工程的话,那么这个路径错了也无所谓。可是如果想在命令行里运行cmake和make编译运行代码的话。这个路径需要正确,否则会找不到Qt5widgetconfig.cmake之类的库。到gcc_64下即可,这个文件夹下是bin、lib等文件夹。

  1. 想要使用Qt的各种功能,首先你需要在电脑中安装Qt库。一般就是去官网下载IDE的时候,把Qt库安装了。

三 main.cpp

#include <iostream>
#include "mainwindow.h"
#include <QApplication>
#include <QWidget>
#include <QDebug>
#include <thread>
#include <QTime>
int QtWindow(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

int main(int argc, char *argv[])
{
QTime startTime = QTime::currentTime();
std::thread t(QtWindow, argc,argv);  
    
    while(1)
    {
    QTime stopTime = QTime::currentTime();
    if(startTime.msecsTo(stopTime)>4000)//4s输出一次
    {
     qDebug()<<" 输出"<<endl;
     startTime = stopTime;
    }

    }

   std::cout << "Hello Qt-CMake!" << std::endl;
   return 0;
}

我们之前所学的qt代码。他的主事件循环是return a.exec()。这个东西阻塞了整个函数的运行。

但是呢,RM代码主函数里有一个while大循环,一直在执行图像处理的代码。所以显然我们不能让这个Qt窗口阻碍代码的运行,所以在这里开了一个线程,里面使用return a.exec(),窗口阻塞的只是线程,除非程序结束,窗口才会因为线程结束而结束,就实现了窗口和图像处理并行运行的效果。

while()循环里每隔5s在控制台输出一个字符串,同时可以对Qt窗口进行操作,验证二者是并行的。

四 Qt设计师界面类

有了CMakeLists.txt和main函数之后,先使用Qt打开CMakeLists.txt文件。

然后右击整个工程。点击file。新建qt,设计师界面类,然后建一个买window。就会产生mainwindow.cpp,mainwindow.hmainwindow.ui三个文件,把这三个文件直接放在main.cpp的目录下即可。想要编辑界面的话,还是需要使用Qt这个软件的。

我在这里做的修改主要是打开一个窗口,在文本框输入内容,再点击一下按钮,标签上会显示输入的内容。


void MainWindow::on_pushButton_pressed()
{
    ui->label_2->setText(ui->lineEdit->text());
}

五 提示

关于如何在Qt中利用CMake构建工程,qt的手册上写了很多。虽然是英文的,但是写得很详细,值得细心阅读。阅读方法:

  1. 使用在线文档,利用谷歌浏览器打开,使用谷歌翻译翻译全页。

    https://doc.qt.io/qt-5/cmake-manual.html

  2. 在Qt Creator软件中搜索Cmake,会出现相同的英文文档。可以在电脑中安装有道翻译,进行取词,啃英文。

整个可运行的工程大家可以关注微信公众号,回复 Qt-cmake 获取,注意大小写。或者可以在CSDN上下载。
欢迎通过微信与我交流。

微信公众号

欢迎大家关注我的个人公众号,现阶段主要总结Robomaster相关的计算机视觉知识:Qt,C++,CMake,OpenCV等等
公众号名称:三丰杂货铺

在这里插入图片描述

©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页