Qtでグラフ描画
Qwtのインストール
計測系のプログラムなどでグラフを表示したいとことは多い。QtのGUI向けにQwtというグラフ表示ライブラリがあるので使ってみる。無料。
公式サイト
ここからQwt6をダウンロードする。それでsrcディレクトリにあるproファイルからQt Creatorでコンパイルする。できたsrcバイナリのあるディレクトリでmake installするとインストール完了。
sin波を表示する
適当にプロジェクトを作って、Plotというクラスを追加する。
ここでQwtPlotを継承することに注意。
コンパイルできるようにQwtの場所をQt Creatorに教える。これは.proファイルに
LIBS += -L/usr/local/qwt-6.0.0-rc5/lib \ -lqwt INCLUDEPATH += /usr/local/qwt-6.0.0-rc5/include
と入れる。
それで、GUIのデザイン画面でWidgetをPlotに格上げする。
ここからが肝心のグラフの調整。
plot.h
#ifndef PLOT_H #define PLOT_H #include <qwt_plot.h> class QwtPlotCurve; class Plot : public QwtPlot { Q_OBJECT public: explicit Plot(QWidget *parent = 0); private: void plotCurve(); QwtPlotCurve *curve1_; }; #endif // PLOT_H
plot.cpp
#include "plot.h" #include <qwt_plot_curve.h> #include <qwt_legend.h> #include <qwt_plot_grid.h> Plot::Plot(QWidget *parent) : QwtPlot(parent) { setTitle("sine"); setCanvasBackground(QColor(Qt::white)); // 凡例 insertLegend(new QwtLegend(), QwtPlot::BottomLegend); // グリッド QwtPlotGrid *grid1 = new QwtPlotGrid; grid1->enableXMin(true); grid1->setMajPen(QPen(Qt::black, 0, Qt::DashDotLine)); grid1->setMinPen(QPen(Qt::gray, 0 , Qt::DotLine)); grid1->attach(this); // 曲線の設定 curve1_ = new QwtPlotCurve("sine wave"); curve1_->setRenderHint(QwtPlotItem::RenderAntialiased); curve1_->setPen(QPen(Qt::red)); curve1_->attach(this); // 軸 setAxisTitle(QwtPlot::xBottom, "x"); setAxisTitle(QwtPlot::yLeft, "y"); // 曲線の描画 plotCurve(); } void Plot::plotCurve() { const int kArraySize = 1000; double x[kArraySize] = {}; // x double y[kArraySize] = {}; // y for (int i = 0; i < kArraySize; ++i) { x[i] = i/(kArraySize-1.0); y[i] = sin(2.0*M_PI*x[i]); } curve1_->setSamples(x, y, kArraySize); }
実行するとこんな感じ。
うちの環境の場合soファイルがないと怒られたので、
/etc/ld.so.conf
に
/usr/local/qwt-6.0.0-rc5/lib
と書いてsudo ldconfigを実行した。
グラフが描けるといろいろ遊べそう。
追加(2011/12/13)
Windows 7 x64の場合
Qwtのサイトからqwt-6.0.1をダウンロードして解凍する。
qwt.proがあるので、Visual Studioのアドインから開いてコンパイルする。
そうするとlibフォルダができて、qwt.lib、qwt.exp、qwt.dllが生成される。
それでexampleフォルダにあるソースが、実行できるようになったはず。
新しいプロジェクトの場合、
追加のインクルードディレクトリに qwt-6.0.1\src
追加のライブラリディレクトリに qwt-6.0.1\lib
C/C++のプリプロセッサの定義に QWT_DLL
を入力する。