QwtおよびQt Creator。 早くて簡単。 パート1:データビジュアライザー





この記事を理解するには、読者がQt Creator環境でWindowsアプリケーションを開発した最初の経験が必要です。

例では、Qt Creator 3.0.0(MinGW)およびQwt-6.1.0を使用しています。



Qwtは、プログラム内のデータを視覚化するプロセスを大幅に簡素化できるグラフィカルライブラリです。 簡略化は次のとおりです。座標スケール、グリッド、データカーブなどの表示要素を手動で指定する必要はありません。 これらの要素のパラメータを設定するだけです。

アナロジー:Excelでグラフを作成するには、データを選択し、表示パラメーター(最小および最大スケール、曲線の色、データラベルなど)を構成します。Excelは視覚化を担当します-要素自体はプログラムしません。

Qwtを使用すると、迷惑な「ブレーキ」が発生することなく、非常に大量のデータ(200,000ポイントで作業できます)を操作できることを強調します。

この記事では、グラフに曲線を表示し、それを拡大縮小し、グラフ内を移動し、カーソルの座標を確認します。 したがって、グラフの表示と表示に必要な最小限の機能を実装します。 以降の記事では、グラフィックエディタに追加機能が搭載されます。



もちろん、インターネットにも同様の指示があります。 しかし、それらはほとんどありません。 Qwtのさま​​ざまな問題を解決するための多くの情報があります。これは、ライブラリを操作する強力な基本スキルを既に持っているプログラマーのみに役立ちます。 この記事では、単純なグラフビジュアライザーを作成できるさまざまなコード例を集めました。

それに取り掛かろう。



ステージ1: QwtをQt Creatorに接続する

(Win 7 x64およびWin 8.1 x64でテスト済み)。







ステージ2: Qwtライブラリを使用します。



ステップ1:環境を準備します。







Qwtライブラリを使用する予定のプロジェクトごとに、手順2と3を実行する必要があります。



ステップ2: Qwt機能の実装。



main.cppファイルは変更されません。 この例では、コードはmainwindow.cppファイルに書き込まれます。 これは完全にエレガントではありませんが、例として受け入れられます。



1. mainwindow.cppの先頭に次の行を追加します。

#include <qwt_plot.h> #include <qwt_plot_grid.h> #include <qwt_legend.h> #include <qwt_plot_curve.h> #include <qwt_symbol.h> #include <qwt_plot_magnifier.h> #include <qwt_plot_panner.h> #include <qwt_plot_picker.h> #include <qwt_picker_machine.h>
      
      







これらのヘッダーに「ファイルが見つかりません」という碑文が付いている場合、手順1の手順3は完了していません。



2.次に、MainWindowコンストラクターでのみコードを記述します。 コードをメソッドに分割することは可能ですが、トレーニングの例の一部として、私はこれをしませんでした。



チャートのメインフィールドを作成します。



 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //        // (this) -      // #include <qwt_plot.h> QwtPlot *d_plot = new QwtPlot( this ); }
      
      





コンパイルして実行すると、それほど魅力的ではない画像が表示されます。





次の行を追加します。

 setCentralWidget(d_plot); //     
      
      







始めます。 ウィンドウを全画面に拡大しようとしていますが、グラフフィールドも適切なスケーリングで全画面に拡大します。 悪くない!





3.次のコード行を追加して、フィールドを装飾します。

  d_plot->setTitle( "Qwt demonstration" ); //  d_plot->setCanvasBackground( Qt::white ); //   //    d_plot->setAxisTitle(QwtPlot::yLeft, "Y"); d_plot->setAxisTitle(QwtPlot::xBottom, "X"); d_plot->insertLegend( new QwtLegend() ); //   // #include <qwt_plot_grid.h> QwtPlotGrid *grid = new QwtPlotGrid(); // grid->setMajorPen(QPen( Qt::gray, 2 )); //     grid->attach( d_plot ); //     
      
      







起動結果(フィールドはすでにかなりきれいに見えます):







4.チャートを追加する



  //  //#include <qwt_plot_curve.h> QwtPlotCurve *curve = new QwtPlotCurve(); curve->setTitle( "Demo Curve" ); curve->setPen( Qt::blue, 6 ); //     curve->setRenderHint ( QwtPlotItem::RenderAntialiased, true ); //  //   // #include <qwt_symbol.h> QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse, QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 8, 8 ) ); curve->setSymbol( symbol ); //       QPolygonF points; points << QPointF( 1.0, 1.0 ) //  x, y << QPointF( 1.5, 2.0 ) << QPointF( 3.0, 2.0 ) << QPointF( 3.5, 3.0 ) << QPointF( 5.0, 3.0 ); curve->setSamples( points ); //      curve->attach( d_plot ); //    
      
      







結果:





最小軸と最大軸は自動的に決定されることに注意してください。 これは嬉しい驚きです! もちろん、たとえば次の行を使用して、これらの値を手動で設定できます。

 d_plot->setAxisScale(QwtPlot::xBottom, 0, 10);
      
      







5.これはすべて良いことですが、チャートに近づいたり削除したり、フィールドを移動したりする可能性があるという事実に慣れています。 問題ありません! ほんの数行で、この機能がエディターに表示されます。



  //   /  // #include <qwt_plot_magnifier.h> QwtPlotMagnifier *magnifier = new QwtPlotMagnifier(d_plot->canvas()); // ,  / magnifier->setMouseButton(Qt::MidButton); //      // #include <qwt_plot_panner.h> QwtPlotPanner *d_panner = new QwtPlotPanner( d_plot->canvas() ); // ,   d_panner->setMouseButton( Qt::RightButton );
      
      







スケーリングと移動:







6.最後に、カーソル座標を決定する機能をアクティブにします。



  //        //      // #include <qwt_plot_picker.h> //   QwtPlotPicker *d_picker = new QwtPlotPicker( QwtPlot::xBottom, QwtPlot::yLeft, //    QwtPlotPicker::CrossRubberBand, //    QwtPicker::ActiveOnly, // / d_plot->canvas() ); //    //    d_picker->setRubberBandPen( QColor( Qt::red ) ); //     d_picker->setTrackerPen( QColor( Qt::black ) ); //     d_picker->setStateMachine( new QwtPickerDragPointMachine() );
      
      







結論:

主にビューアの外観を調整することから成る、かなりのコーディングを行い、基本的な機能を実装しました。



次は? このトピックに興味がある場合は、次の記事でその方法について説明できます。

1.ステータスバーにカーソルの座標を表示し、これらの座標を別の変数に保存します。

2.マウスをクリックして、カーソルの領域にポイントを置きます。

3.コントロールボタンなどを追加します。



PS:フォルダ内の「C:\ qwt-6.1-rc3 \ examples」は、Qwtの多くの興味深い例のソースコードと.exeファイルです。 コメントなしのコード。



リンク(英語):

公式リソース:

qwt.sourceforge.net



Qwtに関するさまざまな問題の解決策のコレクション:

www.qtcentre.org/archive/index.php/f-23.html



ライブラリオプション、Qwtの代替(ありがとう、 GooRoo !)

www.qcustomplot.com



All Articles