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

注: これはCharts with Widgets Galleryの例の一部です。

ローソク足チャートを表示するには、まず日足データを扱うために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;

ファイルでは、データはスペースで区切られた数字の列として配置されている。このスニペットでは、行が1つの数値文字列に分割され、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);

© 2025 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.