使用主题创建图表

注意: 这部分是 带有小部件的图表库示例 的一部分。

在这里,可以更改某些受支持的图表类型内置主题的外观和感觉。

创建图表

不同类型的图表分别生成并添加到布局中。例如,创建折线图如下。其他图表类型的创建方式类似。

首先创建一个图表。

auto chart = new QChart;
chart->setTitle("Line Chart");

生成一组常见的随机数据并将其放置在列表中。这个列表用于每个图表类型向图表的系列中添加数据。对于线条系列,创建并添加到图表的 QLineSeries 实例。

QString name("Series ");
int nameIndex = 0;
for (const DataList &list : m_dataTable) {
    auto series = new QLineSeries(chart);
    for (const Data &data : list)
        series->append(data.first);
    series->setName(name + QString::number(nameIndex));
    nameIndex++;
    chart->addSeries(series);
}

为线条系列创建默认轴。我们还根据系列使用的数据的范围指定轴的范围。

chart->createDefaultAxes();
chart->axes(Qt::Horizontal).first()->setRange(0, m_valueMax);
chart->axes(Qt::Vertical).first()->setRange(0, m_valueCount);

我们还想在标签和 Y 轴之间添加更多空间。为此,我们指定一个在标签中添加空格字符的标签格式。

// Add space to label to add space between labels and axis
auto axisY = qobject_cast<QValueAxis *>(chart->axes(Qt::Vertical).first());
Q_ASSERT(axisY);
axisY->setLabelFormat("%.1f  ");

最后将折线图添加到网格布局中。

chartView = new QChartView(createLineChart(), this);
m_ui->gridLayout->addWidget(chartView, 1, 2);

更改主题

用户可以选择用于示例的内置主题。然后,将此主题应用于布局中的所有图表。

auto theme = static_cast<QChart::ChartTheme>(
            m_ui->themeComboBox->itemData(m_ui->themeComboBox->currentIndex()).toInt());
    ...
chartView->chart()->setTheme(theme);

更改动画、图例和反走样

在此示例中,还可以看到更改动画、图例和反走样如何影响图表的外观。

根据用户选择,在每次图表上设置使用的动画类型。图表中可以没有动画,或者只有网格轴或系列动画,或者两者都有。

QChart::AnimationOptions options(
            m_ui->animatedComboBox->itemData(m_ui->animatedComboBox->currentIndex()).toInt());
if (!m_charts.isEmpty() && m_charts.at(0)->chart()->animationOptions() != options) {
    for (QChartView *chartView : charts)
        chartView->chart()->setAnimationOptions(options);
}

图表可以显示图例。图例可以沿着图表的不同侧面对齐。

Qt::Alignment alignment(
            m_ui->legendComboBox->itemData(m_ui->legendComboBox->currentIndex()).toInt());

if (!alignment) {
    for (QChartView *chartView : charts)
        chartView->chart()->legend()->hide();
} else {
    for (QChartView *chartView : charts) {
        chartView->chart()->legend()->setAlignment(alignment);
        chartView->chart()->legend()->show();
    }
}

用户还可以看到如何更改反走样选项改变图表的外观。反走样根据用户选择更新。

bool checked = m_ui->antialiasCheckBox->isChecked();
for (QChartView *chart : charts)
    chart->setRenderHint(QPainter::Antialiasing, checked);

© 2024 The Qt Company Ltd. 此处包含的文档贡献的版权属于其各自的版权所有者。此处提供的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款授权。Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和其他国家/地区的商标。所有其他商标均属于其各自所有者。