本文以vs2010+qt 编程,安装qwt插件,设计界面如图所示,以正弦信号模拟传感器接收的数据,运行效果如下所示.
由于力传感器相关软件信号采集只能在ubuntu的Clion下,所以需要将相关文件复制拷贝到其项目中,需要的文件有:
其中moc_xx.cpp改成moc_xx.h, 将其在mywidget.cpp中引用,因为qt编译是用Qmake,而Clion是用Cmake, 如果没加会出现以下错误:
Q_OBJECT未定义,若将Q_OBJECT删掉,则QT基本的信号和槽功能不能实现:
所以必须加上上述文件moc_xx.h,
设计步骤:
- 参考我的基于vs2010+qt计算器设计界面,添加qwtplot控件,添加开始和结束按钮,分别命好名qwtPlot_X qwtPlot_Y qwtPlot_Z qwtPlot_RX qwtPlot_RY qwtPlot_RZ
- 添加click响应和自定义槽函数start()和finish()
运行即可出现界面
3.重新定义QWTPLOT属性
定义模拟信号的函数Getdata 和更新qwtplot_x的函数,其中updatadataSlot_X()是实时显示动态曲线的关键
在start()里添加connect(),连接信号和槽
此时运行可出现第一张图像
动态显示正弦曲线的相关代码
mywidget.h如下:
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QtWidgets/QWidget>
#include "ui_mywidget.h"
#include <QTimer>
#include <QTime>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_legend.h>
#include <math.h>
#include <qwt_plot_zoomer.h>
#include <qwt_plot_panner.h>
#include <qwt_plot_magnifier.h>
#include <qwt_plot_grid.h>
#include <qwt_scale_draw.h>
class mywidget : public QWidget
{
Q_OBJECT
public:
mywidget(QWidget *parent = 0);
~mywidget();
public:
void setupqwt_X(QwtPlot* qwtplot); //设置QWTPLOT的属性
void setupqwt_Y(QwtPlot* qwtplot);
void setupqwt_Z(QwtPlot* qwtplot);
void setupqwt_RX(QwtPlot* qwtplot);
void setupqwt_RY(QwtPlot* qwtplot);
void setupqwt_RZ(QwtPlot* qwtplot);
public:
QVector<double> t_data;
QVector<double> X_data;
QVector<double> Y_data;
QVector<double> Z_data;
QVector<double> RX_data;
QVector<double> RY_data;
QVector<double> RZ_data;
QTimer updateTimer;
QwtPlotCurve *curve_X ;
QwtPlotCurve *curve_Y ;
QwtPlotCurve *curve_Z ;
QwtPlotCurve *curve_RX ;
QwtPlotCurve *curve_RY ;
QwtPlotCurve *curve_RZ ;
double getData_X(double );
double getData_Y(double );
double getData_Z(double );
double getData_RX(double );
double getData_RY(double );
double getData_RZ(double );
public slots:
void updatedataSlot_X();
void updatedataSlot_Y();
void updatedataSlot_Z();
void updatedataSlot_RX();
void updatedataSlot_RY();
void updatedataSlot_RZ();
void start();
void finish();
private:
Ui::mywidgetClass ui;
};
#endif // MYWIDGET_H
mywidget.cpp如下:
#include "mywidget.h"
mywidget::mywidget(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
setupqwt_X(ui.qwtPlot_X);
setupqwt_Y(ui.qwtPlot_Y);
setupqwt_Z(ui.qwtPlot_Z);
setupqwt_RX(ui.qwtPlot_RX);
setupqwt_RY(ui.qwtPlot_RY);
setupqwt_RZ(ui.qwtPlot_RZ);
}
mywidget::~mywidget()
{
}
void mywidget::setupqwt_X(QwtPlot* qwtplot)
{
//初始化xdata,x对应长度为5的坐标,y初始全为0
for(int i=1;i<5001;i++)
{
t_data.append(double(i)/1000-5);
X_data.append(0);
}
qwtplot->setTitle("The force of X");
qwtplot->setCanvasBackground(Qt::gray);//背景
//添加曲线
curve_X = new QwtPlotCurve();
curve_X->setPen( Qt::yellow, 1 ); //曲线的颜色 宽度;
QTime curtime;
curtime=curtime.currentTime();
//设置刻度
qwtplot->setAxisScale(QwtPlot::yLeft,-2,2,1); //设置刻度范围-2到2,间隔是1
qwtplot->setAxisScale(QwtPlot::x