Diagramme mit Themes erstellen

Hinweis: Dies ist Teil des Beispiels für die Galerie Diagramme mit Widgets.

Hier ändern Sie das Aussehen der verschiedenen eingebauten Themen für einige der unterstützten Diagrammtypen.

Erstellen von Diagrammen

Die Diagramme der verschiedenen Typen werden separat erstellt und dem Layout hinzugefügt. Das Liniendiagramm wird zum Beispiel wie folgt erstellt. Die Erstellung anderer Diagrammtypen ist ähnlich.

Zunächst wird ein Diagramm erstellt.

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

Ein gemeinsamer Satz von Zufallsdaten wird generiert und in einer Liste abgelegt. Diese Liste wird in jedem Diagrammtyp verwendet, um Daten zu den Reihen des Diagramms hinzuzufügen. Für die Linienreihen werden QLineSeries Instanzen erstellt und dem Diagramm hinzugefügt.

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);
}

Für die Linienreihen werden Standardachsen erstellt. Wir legen auch Bereiche für die Achsen fest, die auf dem Bereich der für die Serie verwendeten Daten basieren.

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

Wir möchten auch mehr Platz zwischen den Beschriftungen und den Y-Achsen einfügen. Zu diesem Zweck geben wir ein Beschriftungsformat an, das den Beschriftungen Leerzeichen hinzufügt.

// 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  ");

Zum Schluss wird das Liniendiagramm dem Rasterlayout hinzugefügt.

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

Ändern des Themas

Der Benutzer kann ein eingebautes Thema auswählen, das in diesem Beispiel verwendet werden soll. Dieses Thema wird dann auf alle Diagramme im Layout angewendet.

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

Ändern von Animation, Legende und Anti-Aliasing

In diesem Beispiel ist es auch möglich zu sehen, wie sich das Ändern von Animation, Legende und Anti-Aliasing auf das Aussehen des Diagramms auswirkt.

Basierend auf der Auswahl des Benutzers wird der verwendete Animationstyp für jedes Diagramm festgelegt. Es ist möglich, keine Animationen im Diagramm zu haben, oder Animationen für die Gitterachse oder die Serie, oder beides.

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);
}

Das Diagramm kann mit einer Legende angezeigt werden. Die Legende kann an verschiedenen Seiten des Diagramms ausgerichtet werden.

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();
    }
}

Der Benutzer kann auch sehen, wie die Änderung der Anti-Aliasing-Option das Aussehen des Diagramms verändert. Die Kantenglättung wird auf der Grundlage der Auswahl des Benutzers aktualisiert.

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

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.