Qwt開發筆記(二):Qwt基礎框架介紹、折線圖介紹、折線圖Demo以及程式碼詳解
前言
Demo
QwtPlot
簡介
列舉
enum QwtPlot::LegendPosition:圖例相對於畫布的位置。
成員函式(列舉常用的)
autoReplot():自動重新整理
bool QwtPlot::autoReplot () const
axisAutoScale():自動縮放
bool QwtPlot::axisAutoScale(QwtAxisId axisId) const
axisFont():軸的刻度標籤的字型
QFont QwtPlot::axisFont (QwtAxisId axisId) const
axisInterval():軸的當前間隔
QwtInterval QwtPlot::axisInterval(QwtAxisId axisId) const
axisMaxMajor():軸的最大主刻度數
int QwtPlot::axisMaxMajor(QwtAxisId axisId) const
axisMaxMinor():軸的最大次刻度數
int QwtPlot::axisMaxMinor (QwtAxisId axisId) const
axisScaleDiv():軸的比例分割
const QwtScaleDiv & QwtPlot::axisScaleDiv(QwtAxisId axisId) const
axisScaleDraw():軸的比例繪製
QwtScaleDraw * QwtPlot::axisScaleDraw(QwtAxisId axisId)const QwtScaleDraw * QwtPlot::axisScaleDraw (QwtAxisId axisId) const
axisScaleEngine():軸的縮放引擎
QwtScaleEngine * QwtPlot::axisScaleEngine(QwtAxisId axisId)const QwtScaleEngine * QwtPlot::axisScaleEngine(QwtAxisId axisId) const
axisStepSize():軸的步長
double QwtPlot::axisStepSize(QwtAxisId axisId) const
axisTitle():軸標題
QwtText QwtPlot::axisTitle(QwtAxisId axisId) const
axisWidget():縮放控制元件
QwtScaleWidget * QwtPlot::axisWidget(QwtAxisId axisId)const QwtScaleWidget * QwtPlot::axisWidget(QwtAxisId axisId) const
canvasBackground():畫布背景
QBrush QwtPlot::canvasBackground() const
canvasMap():畫布貼圖
  QwtScaleMap QwtPlot::canvasMap(QwtAxisId axisId) const virtual
drawCanvas():重繪畫布
void QwtPlot::drawCanvas(QPainter * painter) virtual
drawItems():重繪指定區域畫布元素
void QwtPlot::drawItems(QPainter * painter, const QRectF &canvasRect, const QwtScaleMap maps[QwtAxis::AxisPositions]) const virtual
footer():頁尾文字
QwtText QwtPlot::footer() const
footerLabel():頁尾標籤
QwtTextLabel * QwtPlot::footerLabel() const QwtTextLabel * QwtPlot::footerLabel() const
getCanvasMarginsHint():獲取畫布邊距
void QwtPlot::getCanvasMarginsHint(const QwtScaleMap maps[], const QRectF & canvasRect, double & left, double & top, double & right, double & bottom) const virtual
insertLegend():插入圖例
void QwtPlot::insertLegend(QwtAbstractLegend * legend, QwtPlot::LegendPosition pos = wtPlot::RightLegend, double ratio = -1.0)
invTransform():軸座標轉換
double QwtPlot::invTransform(QwtAxisId axisId, double pos ) const
isAxisValid():軸有效
bool QwtPlot::isAxisValid (QwtAxisId axisId) const
isAxisVisible():軸可見
bool isAxisVisible (QwtAxisId) const
replot():重繪
void QwtPlot::replot() virtual slot
QwtPlotGrid
簡介
成員函式(列舉常用的)
enableX():啟用或禁用垂直網格線。
void QwtPlotGrid::enableX(bool on)
enableY():啟用或禁用水平網格線。
void QwtPlotGrid::enableY(bool on)
enableXMin():啟用或禁用次要垂直網格線。
void QwtPlotGrid::enableXMin(bool on)
enableYMin():啟用或禁用次要水平網格線。
void QwtPlotGrid::enableYMin(bool on)
majorPen():主要網格線的筆
const QPen & QwtPlotGrid::majorPen() const
minorPen():用於次要網格線的筆
const QPen & QwtPlotGrid::minorPen() const
QwtLegend
簡介
QwtSymbol
簡介
列舉
enum QwtSymbol::Style:繪製的資料點符號樣式
成員函式(列舉常用的)
setStyle() :設定點樣式(配合上面列舉Style)
void QwtSymbol::setStyle (QwtSymbol::Style style)
setSize():設定點大小
void QwtSymbol::setSize(const QSize & size)void QwtSymbol::setSize(int width, int height = -1)
QwtPlotCurve
簡介
指定曲線特性
連線/分配資料
將曲線附加到繪圖
成員函式
setTitle():設定曲線的名稱
void QwtPlotItem::setTitle(const QString & title) void QwtPlotItem::setTitle(const QwtText & title)
setPen():設定曲線的畫筆
void QwtPlotCurve::setPen(const QColor & color, qreal width = 0.0, Qt::PenStyle style = Qt::SolidLine)void QwtPlotCurve::setPen(const QPen & pen)
setXAxis():關聯X軸
void QwtPlotItem::setXAxis(QwtAxisId axisId)
setYAxis():關聯Y軸
void QwtPlotItem::setYAxis(QwtAxisId axisId)
setRenderHint():設定曲線渲染模式
void QwtGraphic::setRenderHint(RenderHint hint, bool on = true);
setSamples():設定曲線資料
void QwtPlotCurve::setSamples(const QVector< double > & xData, const QVector< double > & yData)
void QwtPlotCurve::setSamples(const double * xData, const double * yData, int size)
attach():關聯曲線到繪圖
void QwtPlotItem::attach(QwtPlot * plot)
Demo原始碼
LineChartWidget.h
#ifndef LINECHARTWIDGET_H#define LINECHARTWIDGET_H#include <QWidget>#include <QTimer>#include "qwt.h"#include "qwt_plot.h"#include "qwt_plot_grid.h"#include "qwt_legend.h"#include "qwt_plot_curve.h"#include "qwt_symbol.h"#include "qwt_spline_curve_fitter.h"namespace Ui {class LineChartWidget;}class LineChartWidget : public QWidget{ Q_OBJECTpublic: explicit LineChartWidget(QWidget *parent = 0); ~LineChartWidget();public: QColor getBackgroundColor() const;public: void setBackgroundColor(const QColor &backgroundColor);protected: void initControl(); void initQwtPlot();protected slots: void slot_addDataTimeOut();protected: void resizeEvent(QResizeEvent *event); void timerEvent(QTimerEvent *event);private: Ui::LineChartWidget *ui;private: int _timerId; qint64 _startTime; // 啟動時間private: QColor _backgroundColor; // 背景顏色private: QwtPlot *_pQwtPlot; // qwt圖 QwtPlotGrid *_pGrid; // 虛線框 QwtLegend *_pLegend; // 圖例 QwtPlotCurve *_pCurve1; // 曲線1 QwtSymbol *_pSymbol1; // 曲線1點符號 QwtPlotCurve *_pCurve2; // 曲線2 QVector<double> _vectorX1; // 曲線1快取資料 QVector<double> _vectorY1; // 曲線1快取資料 QVector<double> _vectorX2; // 曲線2快取資料 QVector<double> _vectorY2; // 曲線2快取資料 double _rangeX; // 範圍 QTimer *_pTimerAddData; // 新增資料定時器};#endif // LINECHARTWIDGET_H
LineChartWidget.cpp
#include "LineChartWidget.h"#include "ui_LineChartWidget.h"#include <QDebug>#include <QDateTime>//#define LOG qDebug()<<__FILE__<<__LINE__//#define LOG qDebug()<<__FILE__<<__LINE__<<__FUNCTION__//#define LOG qDebug()<<__FILE__<<__LINE__<<QThread()::currentThread()//#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd")#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")LineChartWidget::LineChartWidget(QWidget *parent) : QWidget(parent), ui(new Ui::LineChartWidget), _pQwtPlot(0), _pGrid(0), _pLegend(0), _pCurve1(0), _pSymbol1(0), _pCurve2(0), _timerId(-1), _pTimerAddData(0), _rangeX(10){ ui->setupUi(this); // 背景透明,在介面構架時,若為本視窗為其他視窗提升為本視窗時, // 則再qss會在主視窗第一級新增frame_all,防止其他視窗提升本視窗而沖掉qss設定// setWindowFlag(Qt::FramelessWindowHint);// setAttribute(Qt::WA_TranslucentBackground, true); initControl(); initQwtPlot(); _startTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); _timerId = startTimer(16); timerEvent(0);}LineChartWidget::~LineChartWidget(){ delete ui;}void LineChartWidget::initControl(){ _pTimerAddData = new QTimer(this); connect(_pTimerAddData, SIGNAL(timeout()), this, SLOT(slot_addDataTimeOut())); _pTimerAddData->setInterval(1000); _pTimerAddData->start();}void LineChartWidget::initQwtPlot(){ _pQwtPlot = new QwtPlot(this); // 設定背景色 _pQwtPlot->setCanvasBackground(QBrush(QColor(255, 255, 255))); // 設定x1座標軸 { _pQwtPlot->setAxisTitle(QwtPlot::xBottom, "x"); _pQwtPlot->setAxisAutoScale(QwtPlot::xBottom, true); } // 設定y1座標軸 { _pQwtPlot->setAxisTitle(QwtPlot::yLeft, "y"); _pQwtPlot->setAxisAutoScale(QwtPlot::yLeft, true); } // 設定y2座標軸 { _pQwtPlot->setAxisTitle(QwtPlot::yRight, "y"); _pQwtPlot->setAxisVisible(QwtPlot::yRight, true); _pQwtPlot->setAxisAutoScale(QwtPlot::yRight, true); } // 設定繪圖區域網格 { _pGrid = new QwtPlotGrid(); _pGrid->setMajorPen(Qt::gray, 1, Qt::SolidLine); _pGrid->attach(_pQwtPlot); } // 設定圖例 { _pLegend = new QwtLegend(); _pLegend->setDefaultItemMode(QwtLegendData::ReadOnly); _pQwtPlot->insertLegend(_pLegend); } // 設定曲線1 { _pCurve1 = new QwtPlotCurve(); _pCurve1->setTitle("y1"); _pCurve1->setPen(Qt::blue, 1); _pCurve1->setRenderHint(QwtPlotItem::RenderAntialiased, true); // 關聯軸 _pCurve1->setXAxis(QwtPlot::xBottom); _pCurve1->setYAxis(QwtPlot::yLeft); } // 曲1符號物件 { _pSymbol1 = new QwtSymbol(QwtSymbol::Ellipse); _pSymbol1->setPen(Qt::red); _pSymbol1->setBrush(Qt::red); _pSymbol1->setSize(2); _pCurve1->setSymbol(_pSymbol1); } // 曲線1資料 { // 這是採用顯示共享的方式 _pCurve1->setSamples(_vectorX1, _vectorY1); // 將曲線新增到繪圖 _pCurve1->attach(_pQwtPlot); } // 曲線2 { _pCurve2 = new QwtPlotCurve(); _pCurve2->setTitle("y2"); _pCurve2->setPen(Qt::red, 1); _pCurve2->setRenderHint(QwtPlotItem::RenderAntialiased, true); // 關聯軸 _pCurve2->setXAxis(QwtPlot::xBottom); _pCurve2->setYAxis(QwtPlot::yRight); } // 曲線2資料 { // 這是採用顯示共享的方式 _pCurve2->setSamples(_vectorX2, _vectorY2); // 將曲線新增到繪圖 _pCurve2->attach(_pQwtPlot); }}void LineChartWidget::slot_addDataTimeOut(){ // 計算時間 double currentTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); currentTime -= _startTime; currentTime /= 1000; // 新增曲線1資料 _vectorX1.append(currentTime); _vectorY1.append(qrand() % 20 - 10); // 新增曲線2資料 _vectorX2.append(currentTime); _vectorY2.append(qrand() % 50); // 資料置換(不知換資料進不去,顯示共享無效?) _pCurve1->setSamples(_vectorX1, _vectorY1); _pCurve2->setSamples(_vectorX2, _vectorY2);}void LineChartWidget::resizeEvent(QResizeEvent *event){ if(_pQwtPlot) { _pQwtPlot->setGeometry(rect()); } QWidget::resizeEvent(event);}void LineChartWidget::timerEvent(QTimerEvent *event){ // 計算時間 double currentTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); currentTime -= _startTime; currentTime /= 1000; if(currentTime < 10.0) { _pQwtPlot->setAxisScale(QwtPlot::xBottom, 0, _rangeX, 1); }else{ _pQwtPlot->setAxisScale(QwtPlot::xBottom, currentTime - _rangeX, currentTime, 1); } _pQwtPlot->replot();}QColor LineChartWidget::getBackgroundColor() const{ return _backgroundColor;}void LineChartWidget::setBackgroundColor(const QColor &backgroundColor){ _backgroundColor = backgroundColor;}
Demo工程模板v1.1.0
入坑
入坑一:使用顯示setSample關聯QVector失敗
問題
嘗試
解決
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010283/viewspace-2927021/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Qwt開發筆記(一):Qwt簡介、下載以及基礎demo工程模板筆記
- Qt開發技術:QCharts(三)QCharts樣條曲線圖介紹、Demo以及程式碼詳解QT
- 微信小程式折線圖表折線圖加區域圖微信小程式
- C++ Qt開發:Charts折線圖繪製詳解C++QT
- R : 折線圖
- 【詳解】純 React Native 程式碼自定義折線圖元件 (譯)React Native元件
- echarts 折線圖拼接Echarts
- Qt+ECharts開發筆記(三):ECharts的柱狀圖介紹、基礎使用和Qt封裝DemoQTEcharts筆記封裝
- Qt+ECharts開發筆記(一):ECharts介紹、下載和Qt呼叫ECharts基礎柱狀圖DemoQTEcharts筆記
- iOS使用Charts框架繪製折線圖iOS框架
- canvas圖表(2) - 折線圖Canvas
- 地圖開發筆記(一):百度地圖介紹、使用和Qt內嵌地圖Demo地圖筆記QT
- 【筆記】Python基礎(二)運算子介紹筆記Python
- excel折線圖自定x軸y軸 excel折線圖xy設定Excel
- ECHARTS-折線圖不顯示資料 控制折線圖顏色Echarts
- matlab畫折線圖Matlab
- java作折線圖(轉)Java
- AnyChart繪製折線圖
- PyQtGraph繪製折線圖QT
- Qt+ECharts開發筆記(四):ECharts的餅圖介紹、基礎使用和Qt封裝百分比圖DemoQTEcharts筆記封裝
- 以太坊開發框架Truffle基礎使用介紹框架
- Echars折線配置詳解
- Echarts資料視覺化:圖表篇(2)—— 折線圖、堆疊面積折線圖Echarts視覺化
- Qt+ECharts開發筆記(五):ECharts的動態排序柱狀圖介紹、基礎使用和Qt封裝DemoQTEcharts筆記排序封裝
- Flutter 實現平滑曲線折線圖Flutter
- 詳解javascript拖拽(一)基礎介紹JavaScript
- MATLAB 繪製折線圖Matlab
- PHP 生成折線圖和餅圖等PHP
- C++ Qt開發:Charts折線圖繫結事件C++QT事件
- 膝上型電腦鍵盤的功能介紹 筆記本鍵盤功能介紹圖大全圖解筆記圖解
- amCharts繪製帶趨勢線折線圖
- Python畫圖——matplotlib(普通折線圖)Python
- python畫散點圖和折線圖Python
- 在Excel股價圖中新增折線圖Excel
- D3.js上手——折線圖JS
- Python視覺化-折線圖Python視覺化
- Android 折線圖的實現Android
- 在微信小程式中使用 echarts 圖片-例 折線圖微信小程式Echarts