先来无事,遂研究下qwt编程,其实去年我已经将qwt编译好了,只是到现在才拿出来试试。
首先建一个Qt-widget工程
将qwt库加入到pro里面,本项目内容如下:
DEFINES += QWT_DLL CONFIG += qwt LIBS +=-L"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\qtwlib\qwt-6.1.0\lib" -lqwtd INCLUDEPATH +=C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QWT\src //换上你自己QWT路径当然你也得改成你的qwt编译好的路径,关于如何编译,看客可以google搜罗
基于btc38提供了开放api,详见 http://www.btc38.com/general/789.html
想写个图形显示当前比特币的走势图,遂拿qwt来做个简单的演示
主要看一个图形类 QwtPlot
代码:
#ifndef CURVEPLOTWIDGET_H #define CURVEPLOTWIDGET_H #include <qwt.h> #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_grid.h> #include <qwt_plot_layout.h> #include <qwt_plot_zoomer.h> #include <QString> #include <QPen> #include <QWidget> class curvePlotWidget : public QwtPlot { public: curvePlotWidget(QWidget *parent=0); QVector< double > x_Data; QVector<double> y_Data; QwtPlotCurve *pCurve; void addData(QStringList,QStringList); qint64 iCount; }; #endif // CURVEPLOTWIDGET_H.cpp
#include "curveplotwidget.h" curvePlotWidget::curvePlotWidget(QWidget *parent) : QwtPlot(parent),y_Data(0.0),x_Data(0.0),pCurve(NULL),iCount(0) { //设置一些窗口熟悉 setFrameStyle(QFrame::NoFrame); setLineWidth(0); setWindowOpacity(0.8); plotLayout()->setAlignCanvasToScales(true); //增加网格 QwtPlotGrid *grid = new QwtPlotGrid; grid->setMajorPen(QPen(Qt::yellow, 0, Qt::DotLine)); grid->attach(this); //设置画布背景 setCanvasBackground(QColor(55, 100, 141)); // nice blue //设置X与Y坐标范围 setAxisScale(xBottom, 1, 100); setAxisScale(yLeft, -1, 1); } void curvePlotWidget::addData(QStringList xList,QStringList yList) { //输入数据 iCount ++; x_Data.clear(); y_Data.clear(); //新建一个曲线对象 if(pCurve == NULL) { pCurve=new QwtPlotCurve("curve1"); } int iCount1 = xList.at(0).toInt(); for(int i=0;i<iCount1;++i) x_Data.push_back(i+1); for(int ii = 0;ii<yList.count();ii++) { y_Data<<yList.at(ii).toDouble(); } //y_Data float maxdata=y_Data[0]; int len=y_Data.size(),i; //a.size() 求得向量当前存储数量 for(i=1;i<len;i++) { if (y_Data[i]>maxdata) maxdata=y_Data[i]; } setAxisScale(yLeft, -maxdata, maxdata); //qDebug()<<"x_Data "<<x_Data<<"\n"<<maxdata; qDebug()<<"\ny_Data: "<<y_Data; pCurve->setSamples(x_Data,y_Data); pCurve->attach(this); //设置曲线颜色 QPen pen; if(iCount%2 == 0) { pen.setColor(QColor(255,244,12)); }else{ pen.setColor(QColor(0,244,255)); } pCurve->setPen(pen); //抗锯齿 pCurve->setRenderHint(QwtPlotItem::RenderAntialiased,true); //增加缩放功能 //QwtPlotZoomer *pZoomer= new QwtPlotZoomer(canvas()); //pZoomer->setRubberBandPen(QPen(Qt::red)); //重绘 replot(); }
效果如下: