ローソク足チャートの作成

注:これは 「ウィジェット付きチャート ギャラリー」のサンプルの一部です。

ローソク足チャートの例を示すスクリーンショット

ローソク足チャートを表示するには、まず日次データを扱うためにQCandlestickSeriesを作成します。また、上昇時と下降時の実体の色を独自に指定しています。

auto acmeSeries = new QCandlestickSeries;
acmeSeries->setName("Acme Ltd");
acmeSeries->setIncreasingColor(QColor(Qt::green));
acmeSeries->setDecreasingColor(QColor(Qt::red));

QFile は、非連続データが保存されているテキストファイルにアクセスするために使用されます。CandlestickDataReader は、テキストファイルを読み込み、データから始値、高値、安値、終値、およびタイムスタンプの値を抽出するための補助クラスです。CandlestickDataReader については、後ほど詳しく説明します。readCandlestickSet() メソッドは、値を読み取り、呼び出し元に返す QCandlestickSet オブジェクトにそれらを設定します。返された QCandlestickSet オブジェクトは、シリーズに追加されます。また、後で使用するためにカスタムカテゴリリストも保存しています。

QFile acmeData(":candlestick");
if (!acmeData.open(QIODevice::ReadOnly | QIODevice::Text)) {
    m_loadError = QStringLiteral("Failed to load '%1' file.").arg(acmeData.fileName());
    return false;
}

QStringList categories;

CandlestickDataReader dataReader(&acmeData);
while (!dataReader.atEnd()) {
    QCandlestickSet *set = dataReader.readCandlestickSet();
    if (set) {
        acmeSeries->append(set);
        categories << QDateTime::fromMSecsSinceEpoch(set->timestamp()).toString("dd");
    }
}

以下では、新しい QChart インスタンスを作成し、先に作成したシリーズオブジェクトを追加します。また、タイトルを定義し、QChart::SeriesAnimation としてアニメーションを設定します。

auto chart = new QChart;
chart->addSeries(acmeSeries);
chart->setTitle("Acme Ltd. Historical Data (July 2015)");
chart->setAnimationOptions(QChart::SeriesAnimations);

ここでは、プレゼンテーション用にデフォルトの軸を作成するようチャートに指示します。次に、チャートから軸へのポインタを取得し、事前に保存しておいたカスタムカテゴリ一覧からカテゴリを設定することで、横軸のカスタムカテゴリを設定します。 また、チャートから軸のポインタを取得し、その軸の最小値と最大値を設定することで、縦軸の範囲を設定します。

chart->createDefaultAxes();

auto axisX = qobject_cast<QBarCategoryAxis *>(chart->axes(Qt::Horizontal).at(0));
axisX->setCategories(categories);

auto axisY = qobject_cast<QValueAxis *>(chart->axes(Qt::Vertical).at(0));
axisY->setMax(axisY->max() * 1.01);
axisY->setMin(axisY->min() * 0.99);

以下では、凡例を表示するように設定し、チャートの下部に配置します。

chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignBottom);

最後に、チャートをビューに追加します。

createDefaultChartView(chart);

これで、チャートを表示する準備が整いました。

ここでは、メソッド `readCandlestickSet() ` について詳しく説明します。まず、ファイルから行を読み込みますが、# で始まる行はコメント行とみなしてスキップします。

QString line = m_textStream.readLine();
if (line.startsWith("#") || line.isEmpty())
    return nullptr;

ファイル内のデータは、スペース区切りの数値の列として配置されています。このスニペットでは、行を個々の数値の文字列に分割し、それらをQStringList に格納しています。

QStringList strList = line.split(QLatin1Char(' '), Qt::SkipEmptyParts);
if (strList.count() != 5)
    return nullptr;

連続データから値を選択するには、以下のコードが使用されます。strList 内の値は、タイムスタンプ、始値、高値、安値、終値の順で格納されています。

const qreal timestamp = strList.at(0).toDouble();
const qreal open = strList.at(1).toDouble();
const qreal high = strList.at(2).toDouble();
const qreal low = strList.at(3).toDouble();
const qreal close = strList.at(4).toDouble();

最後に、次のスニペットでは、新しいQCandlestickSetを作成し、必要なすべての値を指定する方法を示しています。

auto candlestickSet = new QCandlestickSet(timestamp);
candlestickSet->setOpen(open);
candlestickSet->setHigh(high);
candlestickSet->setLow(low);
candlestickSet->setClose(close);

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.