cmake dll输出目录_RoboMaster视觉笔记Qt(三)CMake工程添加Qt界面

点击上方“蓝字”关注三丰

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

  • 四  Qt设计师界面类

  • 五  提示

  • 微信公众号

一  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 
#include "mainwindow.h"
#include 
#include 
#include 
#include 
#include 
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,设计师界面类,然后建一个mainwindow。就会产生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,会出现相同的英文文档。可以在电脑中安装有道翻译,进行取词,啃英文。

Tips

a9c4aa3436c30fb65e0e77c9550ced94.png这是三丰陪英俊帅气的你成长的第16篇文章 31519be51907ebe2365d0c03ed86c02b.png ba07c763a3eaea0181e0a55aab60414d.png关注学习更多图像处理知识
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值