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等等
公衆號名稱:三豐雜貨鋪

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章