带日期和时间的折线图

注意: 这是 图表小部件画廊示例 的一部分。

运行示例

要从 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公司有限会社的商标。所有其他商标均属于其各自所有者。