记录一下
qmake .pro文件的配置
QT += core gui printsupport
greaterThan ( QT_MAJOR_VERSION, 4 ) : QT += widgets
CONFIG += c++ 17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# DEFINES += QT_DISABLE_DEPRECATED_BEFORE= 0x060000 # disables all the APIs deprecated before Qt 6.0 . 0
SOURCES += \
main. cpp \
qcustomplot. cpp \
widget. cpp
HEADERS += \
qcustomplot. h \
widget. h
FORMS += \
widget. ui
# Default rules for deployment.
qnx: target. path = / tmp/ $${ TARGET} / bin
else : unix: ! android: target. path = / opt/ $${ TARGET} / bin
! isEmpty ( target. path) : INSTALLS += target
QMAKE_CXXFLAGS += - Wa, - mbig- obj
关键在于这两条(debug模式编译通过不报错)
一个是添加printsupport,另一个是解决太大不能编译的问题
QT += core gui printsupport
QMAKE_CXXFLAGS += - Wa, - mbig- obj
编译通过
widget.h文件
# ifndef WIDGET_H
# define WIDGET_H
# include <QWidget>
# include <QTimer>
# include <QElapsedTimer>
# include <QRandomGenerator>
# include "qcustomplot.h"
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget ;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public :
Widget ( QWidget * parent = nullptr ) ;
~ Widget ( ) ;
private slots:
void realtimeDataSlot ( ) ;
private :
QCustomPlot * customPlot;
QTimer dataTimer;
double xOffset = 0 ;
QElapsedTimer timer;
private :
Ui:: Widget * ui;
} ;
# endif
widget.cpp文件
# include "widget.h"
# include "ui_widget.h"
Widget :: Widget ( QWidget * parent) : QWidget ( parent) , ui ( new Ui:: Widget)
{
ui-> setupUi ( this ) ;
customPlot = new QCustomPlot ( this ) ;
customPlot-> setGeometry ( 0 , 0 , width ( ) , height ( ) ) ;
customPlot-> plotLayout ( ) -> insertRow ( 0 ) ;
customPlot-> plotLayout ( ) -> addElement ( 0 , 0 , new QCPTextElement ( customPlot, "实时数据演示" , QFont ( "微软雅黑" , 12 , QFont:: Bold) ) ) ;
customPlot-> addGraph ( ) ;
customPlot-> graph ( 0 ) -> setPen ( QPen ( QColor ( 40 , 110 , 255 ) ) ) ;
customPlot-> graph ( 0 ) -> setName ( "正弦波形" ) ;
customPlot-> graph ( 0 ) -> setBrush ( QColor ( 40 , 110 , 255 , 20 ) ) ;
customPlot-> xAxis-> setLabel ( "时间 (s)" ) ;
customPlot-> yAxis-> setLabel ( "数值" ) ;
customPlot-> xAxis-> setRange ( 0 , 10 ) ;
customPlot-> yAxis-> setRange ( - 1.5 , 1.5 ) ;
customPlot-> legend-> setVisible ( true ) ;
customPlot-> legend-> setFont ( QFont ( "微软雅黑" , 9 ) ) ;
connect ( & dataTimer, & QTimer:: timeout, this , & Widget:: realtimeDataSlot) ;
dataTimer. start ( 50 ) ;
timer. start ( ) ;
}
Widget :: ~ Widget ( )
{
delete ui;
}
void Widget :: realtimeDataSlot ( )
{
double key = timer. elapsed ( ) / 1000.0 ;
static double lastPointKey = 0 ;
if ( key - lastPointKey > 0.002 )
{
double value = sin ( key + xOffset) ;
customPlot-> graph ( 0 ) -> addData ( key, value) ;
customPlot-> xAxis-> setRange ( key, 10 , Qt:: AlignRight) ;
customPlot-> replot ( ) ;
lastPointKey = key;
}
xOffset += ( QRandomGenerator :: global ( ) -> generateDouble ( ) - 0.5 ) * 0.02 ;
}