基于Qwt的Qt客户端

       先来无事,遂研究下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();
}

基于这个图形类,可以将其到主进程进行实例之

    效果如下:

    基于Qwt的Qt客户端_第1张图片

你可能感兴趣的:(基于Qwt的Qt客户端)