0
点赞
收藏
分享

微信扫一扫

Qwt框架练习1


Qwt比较好的博客

1.​​http://blog.hehehehehe.cn/a/12764.htm​​​

上面第5个博客是通过设置QwtPlotZoomer的各种参数来对放大和缩小plot的方式来进行设置,我这里补充一点对QwtPlotPanner和QwtPlotMagnifier设置,来改变放大和缩小plot的方式
如QwtPlotPanner默认是按住鼠标左键即可拖动plot,设置为按住鼠标右键同时按住键盘上的Ctrl键才能拖动plot

QwtPlotPanner *panner = new QwtPlotPanner(canvas);
panner->setMouseButton(Qt::RightButton,Qt::ControlModifier);

设置按住键盘上的Alt键同时移动鼠标右键来放大和缩小plot

QwtPlotMagnifier *magnifier = new QwtPlotMagnifier(canvas);
magnifier->setMouseButton(Qt::RightButton,Qt::AltModifier);

6.(用Qwt绘制正弦和余弦曲线)
这个实例展示了拖动QwtPlot上点的方法

仿照simpleplot

main.cpp

#include <QApplication>
#include <qwt_plot.h>
#include <qwt_legend.h>
#include <qwt_plot_grid.h>
#include <qwt_plot_curve.h>
#include <qwt_symbol.h>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QwtPlot plot;
//设置整个图形的标题
plot.setTitle("Plot Demo");
plot.setCanvasBackground(Qt::white);
//Y轴在左边,最小值为0.0,最大值为100.0,步长为10
plot.setAxisScale(QwtPlot::yLeft,0.0,100.0,10.0);
//X轴在左边,最小值为0.0,最大值为100.0,步长自动设置
plot.setAxisScale(QwtPlot::xBottom,0.0,100.0);
//插入一个图例,即程序右边显示的部分
plot.insertLegend(new QwtLegend());
//新建一个表格
QwtPlotGrid *grid = new QwtPlotGrid();
//将此QwtPlotItem添加到QwtPlot上面,QwtPlotGrid继承自QwtPlotItem
grid->attach(&plot);
//设置图像界面的大小,从QWidget继承下来
//曲线类
QwtPlotCurve *curve = new QwtPlotCurve();
//图例的标题
//继承制QwtPlotItem的方法
curve->setTitle("Some Points");
//设置曲线的颜色和宽度
curve->setPen(Qt::blue,4);
curve->attach(&plot);
//继承制QwtPlotItem类的方法
//设置提示并显示
curve->setRenderHint(QwtPlotItem::RenderAntialiased,true);
//画符号的类,用来显示点的样式
QwtSymbol *symbol = new QwtSymbol(QwtSymbol::Ellipse,QBrush(Qt::yellow),QPen(Qt::red,2),QSize(8,8));
curve->setSymbol(symbol);
QPolygonF points;//放点的一个集合类
points<<QPointF(0.0,4.0)<<QPointF(100.0,20.0);
curve->setSamples(points);
plot.resize(600,400);
plot.show();
return

Qwt框架练习1_数据

Qwt动态显示数据

mainwindow.h(刷新整个mainwindow)

#ifndef MAINWINDOW_H
#define

#include <QMainWindow>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <QTimerEvent>

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = 0);
QwtPlot *plot;
QwtPlotCurve *curve;
~MainWindow();
private:
void timerEvent(QTimerEvent *);
double time[10];
double value[10];
};

#endif

mainwindow.cpp

#include "mainwindow.h"
#include <qwt_plot_canvas.h>
#include <qwt_plot_grid.h>
#include <qwt_plot_picker.h>
#include <QPolygonF>
#include <QColor>
#include <QHBoxLayout>
#include <QWidget>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QHBoxLayout *mainLayout = new QHBoxLayout();
QWidget *widget = new QWidget();
widget->setLayout(mainLayout);
setCentralWidget(widget);
plot = new QwtPlot(this);
plot->resize(600,400);
plot->setTitle("数据显示图");
//设置y轴的位置及标尺
plot->setAxisScale(QwtPlot::yLeft,0.0,10.0);
//设置x轴的位置及标尺
plot->setAxisScale(QwtPlot::xBottom,0.0,10.0);
mainLayout->addWidget(plot);
QwtPlotCanvas *canvas = new QwtPlotCanvas;
canvas->setBorderRadius(10);
plot->setCanvas(canvas);
plot->setCanvasBackground(QColor("white"));
QwtPlotGrid *grid = new QwtPlotGrid();
grid->setMajorPen( Qt::black, 0, Qt::DotLine );
grid->attach(plot);
curve = new QwtPlotCurve;
for(int i=0; i<10; i++)
time[i] = i + 1;
double value[10] = {6,1,4,8,5,2,1,3,2,10};
//x轴y轴数据及长度
curve->setSamples(time,value,10);
//把曲线和图联系起来
curve->attach(plot);
//从QObject的函数,应该是每隔一秒刷新一次MainWidnow,要想轻量级的显示可以使用QTimer
startTimer(1000);
}

MainWindow::~MainWindow()
{

}
//时间到的时候,自动触发的函数
void MainWindow::timerEvent(QTimerEvent *event)
{
for(int i=0; i<9; i++)
value[i] = value[i+1];
value[9] = qrand() % 10;
curve->setSamples(time,value,10);
plot->replot();
}

mianwindow.cpp(只刷新图的部分)

public:
MainWindow(QWidget *parent = 0);
QwtPlot *plot;
QwtPlotCurve *curve;
~MainWindow();
private slots:
void timerEvent();
private:
double time[10];
double value[10];

mainwindow.cpp

double value[10] = {6,1,4,8,5,2,1,3,2,10};
//x轴y轴数据及长度
curve->setSamples(time,value,10);
//把曲线和图联系起来
curve->attach(plot);
QTimer *time = new QTimer();
time->start(1000);
connect(time,SIGNAL(timeout()),this,SLOT(timerEvent()));

//时间到的时候,自动触发的函数
void MainWindow::timerEvent()
{
for(int i=0; i<9; i++)
value[i] = value[i+1];
value[9] = qrand() % 10;
curve->setSamples(time,value,10);
plot->replot();
}

Qwt框架练习1_#include_02


可以对线和点的样式进行设置,看下面的项目


举报

相关推荐

0 条评论