1. 程式人生 > >利用Qt Creator 如何在ROS 專案中從一個介面呼叫另一個介面?

利用Qt Creator 如何在ROS 專案中從一個介面呼叫另一個介面?

首先介紹我使用的是Qt Creator 4.4.1,Based on Qt 5.9.1 (GCC 4.9.4, 64 bit),為了方便在qt中開發ROS介面,安裝了ros_qtc_plugin 外掛(可以參考文章:http://blog.csdn.net/zhangrelay/article/details/52068657有什麼問題直接去Levi-Armstrong的github上找,目前網上一些安裝教程可能更新不及時,最終安裝完的選項可能不完全一樣),可以直接新建帶介面的ros專案,方便除錯。

1.在Qt Creator中新建一個ros的workspace


2.在終端進入ros專案的src目錄下,利用命令

catkin_create_qt_pkg test2 roscpp  建立名為test2 的包含Qt介面的ros package,檔案目錄如下所示:


在ui檔案下可以看到ui檔案(右邊那五個button是自己新增的,預設介面中沒有),先新增一個Manual Dialog Control 按鈕,用它調出另一個介面


3.在test2 package src目錄下新建Qt Designer Form Class介面檔案(名為manualdialog),選擇dialog(mainwindow也一樣)


新建完成後會產生三個檔案,manualdialog.h manualdialog.cpp manualdialog.ui,將他們分別移動到對應的資料夾中

,然後在manualdialog.cpp檔案中更改標頭檔案目錄

#include "../include/test2/manualdialog.h"
4.最重要的問題是要在CmakeLists檔案中做更改
file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS include/test2/*.hpp *.h)
//一定要加上*.h 不然找不到manualdilog.h標頭檔案
//如果編譯找不到原始檔再試試下面這句話,一般不需要
//set(QT_SOURCES src/main.cpp src/qnode.cpp src/main_window.cpp src/manualdialog.cpp )
//在原始檔中新增manualdilog.cpp
5.接下來就和非ROS專案中呼叫一個介面步驟一樣了,在manualdialog.ui檔案中畫出你需要的控制元件,然後在主介面的Manual Dialog Control上連線訊號與槽呼叫manualdialog.ui介面,如下圖所示


第四步是關鍵,不然老是會出現類沒定義,找不到*.o檔案之類的錯誤,當時我就在這上面耗費了好多時間。