用cmake建立一个QT工程

举个例子
CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 3.0)

PROJECT (QTTEST)

#SET(CMAKE_BUILD_TYPE Release)
SET(CMAKE_BUILD_TYPE Debug)

#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -std=c++14 -fPIC -Wreturn-type -Wmaybe-uninitialized")# -Wreorder -Wdelete-non-virtual-dtor
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -std=c++14 -fPIC -Wall")

# just for mem check
#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -std=c++11 -fPIC")

#set(CMAKE_VERBOSE_MAKEFILE ON)
message("Build Type: ${CMAKE_BUILD_TYPE} ${CMAKE_CXX_FLAGS}")

SET ( QTTEST_VERSION_MAJOR 0 )
SET ( QTTEST_VERSION_MINOR 0 )
SET ( QTTEST_VERSION_PATCH 1 )
SET ( QTTEST_VERSION ${QTTEST_VERSION_MAJOR}.${QTTEST_VERSION_MINOR}.${QTTEST_VERSION_PATCH})
SET ( PROJECT_VERSION ${QTTEST_VERSION})

# use this macro in source file to locate other files
ADD_DEFINITIONS(-DPROJECT_DIR=\"${PROJECT_SOURCE_DIR}/\")

LIST( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake )

find_package(Qt5Widgets  CONFIG REQUIRED)
find_package(Qt5PrintSupport  REQUIRED)
find_package(Qt5Gui  REQUIRED)
find_package(Qt5Core  REQUIRED)
find_package(Qt5OpenGL REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5 COMPONENTS Widgets)
set(Qt5_INCLUDE_DIRS ${Qt5Widgets_INCLUDE_DIRS} ${Qt5PrintSupport_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Core_INCLUDE_DIRS} /usr/include/qwt/)
set(Qt5_LIBRARIES ${Qt5Widgets_LIBRARIES} ${Qt5PrintSupport_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Core_LIBRARIES} qwt-qt5 ${Qt5OpenGL_LIBRARIES} ${Qt5Network_LIBRARIES})

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed
set(CMAKE_AUTOMOC ON)
# Create code from a list of Qt designer ui files
set(CMAKE_AUTOUIC ON)

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/)
link_directories(${PROJECT_SOURCE_DIR}/libs)

include_directories(
        ${Qt5_INCLUDE_DIRS}
        ${PROJECT_SOURCE_DIR}
        )


set(DEPENDENCIES
        ${Qt5_LIBRARIES}
        )


FILE(GLOB_RECURSE SRCS core/*.h core/*.hpp core/*.cpp core/*.cc core/*.cxx)
add_library(${PROJECT_NAME} SHARED ${SRCS})
target_link_libraries(${PROJECT_NAME} ${DEPENDENCIES})
ADD_SUBDIRECTORY (test)

头文件

#ifndef mywindow_h
#define mywindow_h

#include <QMainWindow>
#include <QScopedPointer>
#include <QtCore/QTimer>
#include <qwt_plot_curve.h>
#include <vector>
#include <QtCore/QFile>
#include <QtGui/QStandardItemModel>
#include <QtNetwork/QTcpSocket>
#include <QTreeWidgetItem>

namespace Ui
{
    class MyWindow;
}


class MyWindow : public QMainWindow {
    Q_OBJECT

public:
    explicit MyWindow(QWidget *parent = nullptr);
    ~MyWindow() override;

    QTcpSocket *m_client_socket_;

    QTimer timer_;

    QVector<double> t_data_;

public slots:
    void UpdateData();
    void OnPushButtonConnect();
    void SocketReadData();

private:
    QScopedPointer<Ui::MyWindow> ui;
};

#endif

cpp文件

#include <iostream>

#include "mywindow.h"
#include "ui_mywindow.h"

#include <QVector>
#include <QDateTime>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_magnifier.h>
#include <qwt_plot_panner.h>
#include <qwt_legend.h>
#include <qwt_point_data.h>
#include <qwt_plot_zoomer.h>
#include <QtCore/QFile>
#include <QtWidgets/QTableWidgetItem>
#include <QDragEnterEvent>
#include "string"

#define DEBUG_GUI


MyWindow::MyWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MyWindow)
{
    ui->setupUi(this);

    ui->lineEdit_IP->setText("192.168.1.5");
    ui->lineEdit_Port->setText("8010");

    m_client_socket_ = new QTcpSocket();
    //连接信号槽
    QObject::connect(m_client_socket_, &QTcpSocket::readyRead, this, &ClientWindow::SocketReadData);

    connect(ui->pushButton_Connect, SIGNAL(released()), this, SLOT(OnPushButtonConnect()));

    connect(&timer_,SIGNAL(timeout()),this,SLOT(UpdateData()));
    timer_.start(100);

}



MyWindow::~MyWindow(){
}

void MyWindow::UpdateData(){
    //todo:

}

void MyWindow::OnPushButtonConnect() {
    if(ui->pushButton_Connect->text() == tr("连接"))
    {
        QString IP;
        int port;

        //获取IP地址
        IP = ui->lineEdit_IP->text();
        //获取端口号
        port = ui->lineEdit_Port->text().toInt();

        //取消已有的连接
        m_client_socket_->abort();
        //连接服务器
        m_client_socket_->connectToHost(IP, port);

        //等待连接成功
        if(!m_client_socket_->waitForConnected(30000))
        {
            qDebug() << "连接失败!";
            return;
        }
        qDebug() << "连接成功!";

        //修改按键文字
        ui->pushButton_Connect->setText("断开连接");
    }
    else
    {
        //断开连接
        m_client_socket_->disconnectFromHost();
        //修改按键文字
        ui->pushButton_Connect->setText("连接");
    }

}



void MyWindow::SocketReadData() {
    QByteArray buffer;
    //读取缓冲区数据
    buffer = m_client_socket_->readAll();
    ...
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您提供一些指导。 首先,您需要安装CMake和MITK。确保它们都已正确安装并设置好环境变量。 接下来,创建一个新的文件夹,以存放您的插件工程。假设它的名称为MyMITKPlugin。 在MyMITKPlugin文件夹中,创建一个名为CMakeLists.txt的文件,并添加以下内容: ``` cmake_minimum_required(VERSION 3.10) project(MyMITKPlugin) # Find MITK find_package(MITK REQUIRED) # Set up your plugin mitk_create_plugin( EXPORT_DIRECTIVE MYMITKPLUGIN_EXPORT EXPORTED_INCLUDE_SUFFIXES src MODULE_DEPENDS MitkCore ) # Add your source files add_subdirectory(src) ``` 上述代码将使用MITK作为依赖项,并创建一个名为MyMITKPlugin的插件工程。接下来,您需要在src文件夹中添加您的源代码。 例如,如果您要添加一个名为MyFilter的插件,您需要在src文件夹中创建一个名为MyFilter的文件夹,并在其中添加以下内容: ``` mitk_create_plugin( EXPORT_DIRECTIVE MYFILTER_EXPORT EXPORTED_INCLUDE_SUFFIXES src MODULE_DEPENDS MitkCore ) set(SRC_FILES src/MyFilter.cpp ) mitk_add_library(MyFilter ${SRC_FILES} ) target_link_libraries(MyFilter PUBLIC MitkCore ) ``` 上述代码将创建一个名为MyFilter的插件,并将其作为MitkCore模块的依赖项。您需要在src/MyFilter.cpp文件中添加您的实际源代码。 最后,您需要使用CMake来构建和编译您的插件工程。在MyMITKPlugin文件夹中创建一个名为build的文件夹,并在其中运行以下命令: ``` cmake .. make ``` 这将构建和编译您的插件工程,并将生成的库文件放置在MyMITKPlugin/build/plugins文件夹中。 希望这个指导对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值