举个例子
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();
...
}