带日期和时间的折线图
注意: 这是 图表小部件画廊示例 的一部分。
运行示例
要从 Qt Creator 运行示例,请打开 欢迎 模式并从 示例 中选择示例。有关更多信息,请访问 构建和运行示例。
创建折线图
要创建折线图,需要 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 将创建 QValueAxis 作为 X 轴和 Y 轴。要使用 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 Qt公司有限会社。本文档中的文档贡献属于其各自所有者的版权。本提供的文档受GNU自由文档许可(版本1.3)条款的许可,该许可由自由软件基金会发布。GNU自由文档许可版本1.3。Qt以及相应的标志是芬兰和/或其他国家和地区的Qt公司有限会社的商标。所有其他商标均属于其各自所有者。