ローソク足チャートの作成
注: これは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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。