📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

328行目: 328行目:
<br>
<br>
以下の例では、度単位の数値を度分秒表記にしている。<br>
以下の例では、度単位の数値を度分秒表記にしている。<br>
<br>
まず、<code>QwtScaleDraw</code>クラスを継承した派生クラスを作成する。<br>
まず、<code>QwtScaleDraw</code>クラスを継承した派生クラスを作成する。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
383行目: 384行目:
この時、大きい数値は指数型の文字列を返す。<br>
この時、大きい数値は指数型の文字列を返す。<br>
指数型の文字列を表示させない場合も、上記のように、<code>QwtPlot</code>クラスを継承した派生クラスを作成する必要がある。<br>
指数型の文字列を表示させない場合も、上記のように、<code>QwtPlot</code>クラスを継承した派生クラスを作成する必要がある。<br>
<br><br>
== マーカーを入れる ==
マーカーは、縦線・横線およびシンボルを描画することができる。<br>
また、マーカーにテキストのラベルを付加することもできる。<br>
<br>
例えば、Qwt付属のサンプルでは、ピーク値の表示に使用している。<br>
<br>
以下の例では、3種類のマーカーを作成して、全てのマーカーでテキストを右寄せ上寄せに設定している。<br>
マーカーの外観は、他にも様々な設定ができる。<br>
<syntaxhighlight lang="c++">
// QwtPlotクラスのポインタ(*m_pPlot)とQwtPlotMarkerクラスのポインタ(*m_pPMarker)をメンバに持つ
// QMainWindowクラスのコンストラクタ
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    // ポイントマーカー
    m_pPMarker = std::make_unique<QwtPlotMarker>();
    m_pPMarker->setXValue(600.0);
    m_pPMarker->setYValue(600.0);
    m_pPMarker->setLabelAlignment(Qt::AlignRight | Qt::AlignTop);
    QwtText textPMarker("Point marker");
    m_pPMarker->setLabel(textPMarker);
    // ポイントシンボル
    std::unique_ptr<QwtSymbol> pSymbol = std::make_unique<QwtSymbol>(QwtSymbol::Ellipse, QBrush(QColor::fromRgb(0, 0, 0)),
                                                                    QPen(QColor::fromRgb(0, 0, 0)), QSize(20, 10));
    m_pPMarker->setSymbol(pSymbol);
    m_pPMarker->attach(m_pPlot);
    // 横ラインマーカー
    m_pHMarker = std::make_unique<QwtPlotMarker>();
    m_pHMarker->setXValue(200.0);
    m_pHMarker->setLabelAlignment(Qt::AlignRight | Qt::AlignTop);
    m_pHMarker->setLineStyle(QwtPlotMarker::VLine);
    m_pHMarker->setLinePen(QPen(Qt::magenta, 0, Qt::DashDotDotLine));
    QwtText textHMarker("Virtical line marker");
    m_pHMarker->setLabel(textHMarker);
    m_pHMarker->attach(m_pPlot);
    // 縦ラインマーカー
    m_pVMarker = std:make_unique<QwtPlotMarker>();
    m_pVMarker->setYValue(100.0);
    m_pVMarker->setLabelAlignment(Qt::AlignRight | Qt::AlignTop);
    m_pVMarker->setLineStyle(QwtPlotMarker::HLine);
    m_pVMarker->setLinePen(QPen(Qt::cyan, 0, Qt::DashDotDotLine));
    QwtText textVMarker("Horizontal line marker");
    m_pVMarker->setLabel(textVMarker);
    m_pVMarker->attach(m_pPlot);
}
</syntaxhighlight>
<br><br>
== プロット画面をエクスポートおよび印刷する ==
<code>QwtPlotRenderer</code>クラスを使用して、プロット画面をマーカーや軸と共に、エクスポートおよび印刷する。<br>
<br>
以下の例では、SVGにエクスポートおよび印刷している。<br>
<syntaxhighlight lang="c++">
// 印刷
void ParentWnd::onPrint()
{
    // m_printerはQPrinterクラスのオブジェクト
    QPrintDialog dlgPrint( &m_printer, this );
    if(dlgPrint.exec())
    {
      QwtPlotRenderer renderer;
      // m_pPlotはQwtPlotオブジェクトのポインタ
      renderer.renderTo(m_pPlot, m_printer);
    }
}
// SVGへエクスポート
void ParentWnd::exportSVG( QString strFName )
{
    QwtPlotRenderer renderer;
    // 第3引数はフォーマットの指定, 第4引数はドキュメントサイズをミリ単位で指定, 第5引数は解像度(dpi)
    renderer.renderDocument(m_pPlot, strFName, tr("svg"), QSizeF(210, 210), 300);
}
</syntaxhighlight>
<br>
ただし、プロットの縦横比を固定しても、印刷時の縦横比は紙サイズに合わせて変化するため、<br>
印刷時において、縦横比を固定する場合は、<code>QwtPlotRenderer</code>クラスの<code>render</code>メソッドを使用して印刷時の範囲を指定する。<br>
(<code>QwtPlotRenderer</code>クラスの<code>renderTo</code>メソッドは使用しない)<br>
<syntaxhighlight lang="c++">
QRectF rcPrint;
QPainter printPainter(&m_printer);
rcPrint.setWidth(100);
rcPrint.setHeight(100);
renderer.render(m_pPlot, &printPainter, rcPrint);
</syntaxhighlight>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]