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

注: これは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);

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。