どのように構築し、使用ユーザ定義のQTライブラリへ|カスタムダイナミックリンクライブラリのQtをコンパイルして使用する方法

この記事では、最初の個人的なブログが登場https://kezunlin.me/post/cf628dd8/ようこそ!

別のプロジェクトではQTライブラリと使用を構築するためのガイド

ガイド

ビルドQtライブラリ

QObjectのクラス

class  SHARED_EXPORT CameraGrabber : public QObject
{
    Q_OBJECT
        signals :
    void sendFrameTrash(int nCameraID, int nTotalTrashFrame);
public:
    explicit CameraGrabber(QObject *parent = 0);
}

CMakeLists.txt

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)  # for qt SLOTS

add_library(${CAMERA_GRABBER_TARGET}
    CaptureProcess.h
    CaptureProcess.cpp
    FindGrabber.h 
    FindGrabber.cpp
    CameraGrabber.h
    CameraGrabber.cpp
)

qt5_use_modules(${CAMERA_GRABBER_TARGET} Core)

target_link_libraries (${CAMERA_GRABBER_TARGET} 
    ${CONGIF_TARGET}
    ${SAPERA_LIBRARIES}
)

構築し、取得CameraGrabber.hCameraGrabber.libCameraGrabber.dllmocs_compilation.cpp

メインウィンドウでQtライブラリを使用します

MainWindow.h

#include "Sensor/CameraGrabber/CameraGrabber.h" 

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent=0);
    ~MainWindow();
   
private:
    CameraGrabber *graber = nullptr;
}

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

// moc cpp files for QObject
#include "build/src/car/Sensor/CameraGrabber/MySensorCameraGrabber_autogen/mocs_compilation.cpp"

CMakeLists.txt

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)  # for qt project

#==============================================================
# cpp,ui,resource files
#==============================================================
# cpp files
#aux_source_directory(. SRC_LIST)
set(SRC_LIST 
    main.cpp
    mainwindow.h
    mainwindow.cpp
)

# ui files
qt5_wrap_ui(ui_FILES mainwindow.ui)

# resource files
qt5_add_resources(qrc_FILES resource.qrc)

message( [Main] ${SRC_LIST} ) 
message( [Main] ${ui_FILES} ) 
message( [Main] ${qrc_FILES} )

#==============================================================
# generate and link target for point_cloud_viewer
#==============================================================
set(TARGET_NAME aa_qt_main)
add_executable(${TARGET_NAME} ${SRC_LIST} ${ui_FILES} ${qrc_FILES})

# link qt libraries
qt5_use_modules(${TARGET_NAME} Core Widgets OpenGL Xml Gui Sql)

# link vtk and pcl libraries
target_link_libraries(${TARGET_NAME} 
    ${CONFIG_TARGET} 
    ${UTIL_TARGET}  
    ${MODEL_TARGET} 
    ${DETECTION_TARGET} 
    ${DATABASE_TARGET} 

    # sensor
    ${CODER_LINKER_TARGET}
    ${RFID_TARGET}
    ${CAMERA_GRABBER_TARGET}
    ${LIDAR_GRABBER_TARGET}

    ${GTEST_LIBRARIES}
    ${BOOST_THREAD_LIBRARY}
    ${GLOG_LIBRARIES}

    ${Boost_LIBRARIES}
    ${OpenCV_LIBS}
    ${PCL_LIBRARIES}
)

ヒント

我々はQObjectをを使用QT DLLを参照する場合、我々は、ヘッダを含む場合、MainWindow.h私たちも含まなければなりませんmocs_compilation.cppMainWindow.cppそれ以外の場合はエラーが発生します。

error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const staticMetaObject

参照

歴史

  • 20180409:作成しました。

著作権

  • 投稿者:kezunlin
  • ポストリンク:https://kezunlin.me/post/cf628dd8/
  • 著作権:別途明記しない限り、このブログのすべての記事はCC BY-NC-SA 3.0の下でライセンスされています。

おすすめ

転載: www.cnblogs.com/kezunlin/p/11835026.html