日付軸と時間軸を持つ折れ線グラフ
注: これはウィジェット・ギャラリーによるチャートの例の一部です。
例の実行
Qt Creator からサンプルを実行するには、Welcome モードを開き、Examples からサンプルを選択します。詳細については、Building and Running an Example を参照してください。
折れ線グラフの作成
折れ線グラフを作成するには、QLineSeries インスタンスが必要です。作ってみよう。
auto series = new QLineSeries;
このグラフでは、太陽黒点の数が時間的にどのように変化するかを示す。データ(宇宙天気予報センターから)はテキストファイルから読み込む。
下のスニペットでは、QDateTime::toMSecsSinceEpoch メソッドを使って、QDateTime オブジェクトをQLineSeries append メソッドに渡せる数値に変換していることに注目してほしい。
// data from http://www.swpc.noaa.gov/ftpdir/weekly/RecentIndices.txt // http://www.swpc.noaa.gov/ftpdir/weekly/README // http://www.weather.gov/disclaimer QFile sunSpots(":sun_spots"); if (!sunSpots.open(QIODevice::ReadOnly | QIODevice::Text)) { m_loadError = QStringLiteral("Failed to load '%1' file.").arg(sunSpots.fileName()); return false; } QTextStream stream(&sunSpots); while (!stream.atEnd()) { QString line = stream.readLine(); if (line.startsWith("#") || line.startsWith(":")) continue; QStringList values = line.split(QLatin1Char(' '), Qt::SkipEmptyParts); QDateTime momentInTime; momentInTime.setDate(QDate(values[0].toInt(), values[1].toInt() , 15)); series->append(momentInTime.toMSecsSinceEpoch(), values[2].toDouble()); } sunSpots.close();
チャート上にデータを表示するには、QChart インスタンスが必要です。これに系列を追加し、凡例を非表示にし、デフォルトの軸を作成し、チャートのタイトルを設定します。
auto chart = new QChart; chart->addSeries(series); chart->legend()->hide(); chart->setTitle("Sunspots count (by Space Weather Prediction Center)");
ここではQLineSeries を使用しているので、createDefaultAxesを呼び出すと、X軸とY軸の両方としてQValueAxis が作成される。QDateTimeAxis を使用するには、これを手動でチャートに設定する必要がある。まず、QDateTimeAxis のインスタンスを作成し、次に表示する目盛りの数を設定する。太陽黒点の数は、その月の平均値として提供される。したがって、軸ラベルに時刻と曜日に関する情報を含める必要はない。これは、カスタム・ラベル・フォーマットを設定することで実現できる。利用可能な形式オプションについては、QDateTime::toString() メソッドのドキュメントを参照してください。
auto axisX = new QDateTimeAxis; axisX->setTickCount(10); axisX->setFormat("MMM yyyy"); axisX->setTitleText("Date"); chart->addAxis(axisX, Qt::AlignBottom); series->attachAxis(axisX); auto axisY = new QValueAxis; axisY->setLabelFormat("%i"); axisY->setTitleText("Sunspots count"); chart->addAxis(axisY, Qt::AlignLeft); series->attachAxis(axisY);
次に、QChart をパラメータとしてQChartView オブジェクトを作成します。こうすることで、QGraphicsView シーンを作成する必要がなくなります。また、レンダリングされた線がよりきれいに見えるように、アンチエイリアスをオンに設定します。
createDefaultChartView(chart);
これでチャートを表示する準備ができました。
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。