Diagramme 2D in Qt Widgets
Verwendung von Diagrammen für 2D in einer Widget-basierten Anwendung.
Graphs 2D unterstützt nur Qt Quick Anwendungen. Dieses Beispiel zeigt, wie man ein einfaches 2D-Tortendiagramm in einer Qt Widgets Anwendung unter Verwendung einer QQuickWidget anzeigt.
Ausführen des Beispiels
Um das Beispiel auszuführen Qt Creatorauszuführen, öffnen Sie den Modus Welcome und wählen Sie das Beispiel aus Examples. Weitere Informationen finden Sie unter Qt Creator: Tutorial: Erstellen und Ausführen.
Hauptansicht
- Die Klasse
PieWidget
implementiert die Hauptansicht der Demoanwendung. In der KlassePieWidget
instanziieren Sie die Widgets, die zur Implementierung des Anwendungslayouts und der UI-Elemente verwendet werden.m_quickWidget = new QQuickWidget; m_widget = new QWidget; m_vLayout = new QVBoxLayout(m_widget); m_hLayout = new QHBoxLayout; ...
- Die Klasse
PieGraph
wird verwendet, um die Logik für das Hinzufügen und Entfernen von Slices zu handhaben, und verfügt über weitere Funktionen.m_pieGraph = new PieGraph; ...
- Für QQuickWidget setzen Sie source und resizeMode, und setzen Sie die Eigenschaft
context
. Mit der EigenschaftContext
können Daten für QML-Komponenten, die von der QML-Engine instanziiert werden, bereitgestellt werden.QQmlContext *context = m_quickWidget->engine()->rootContext(); context->setContextProperty("pieGraph", m_pieGraph); m_quickWidget->setSource(QUrl("qrc:/qml/quickwidgetgraphs/main.qml")); m_quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
- Initialisieren Sie Schaltflächen und fügen Sie sie dem Layout hinzu.
void PieWidget::initializeButtons() { QPushButton *addButton = new QPushButton("Add Slice"); QPushButton *removeButton = new QPushButton("Remove Slice"); QPushButton *explodeButton = new QPushButton("Explode All"); QPushButton *clearButton = new QPushButton("Clear Series"); m_hLayout->addWidget(addButton); m_hLayout->addWidget(removeButton); m_hLayout->addWidget(explodeButton); m_hLayout->addWidget(clearButton); QObject::connect(addButton, &QPushButton::clicked, m_pieGraph, &PieGraph::onAddSlice); QObject::connect(removeButton, &QPushButton::clicked, m_pieGraph, &PieGraph::onRemoveSlice); QObject::connect(explodeButton, &QPushButton::clicked, m_pieGraph, &PieGraph::onExplode); QObject::connect(clearButton, &QPushButton::clicked, m_pieGraph, &PieGraph::onClearSeries); ...
Manipulation von Graphdaten
Die Klasse PieGraph
implementiert die gesamte Logik zur Manipulation von Graphdaten in diesem Beispiel.
- Deklarieren Sie in der Klasse
PieGraph
eine EigenschaftpieSeries
.... Q_PROPERTY(QPieSeries *pieSeries READ pieSeries WRITE setPieSeries NOTIFY pieSeriesChanged FINAL) ...
- Erstellen Sie Funktionen zum Hinzufügen, Entfernen, Explodieren von Slices und Löschen von Tortenreihen.
... void appendSlice(); void removeSlice(); void explodeSlices(); void clearSeries(); void fillSliceInfo(); public Q_SLOTS: void onAddSlice(); void onRemoveSlice(); void onExplode(); void onClearSeries(); ...
- Instanziieren Sie eine Tortenreihe und fügen Sie mehrere Scheiben in Ihrem Konstruktor hinzu.
... m_pieSeries = new QPieSeries; fillSliceInfo(); for (int i = 1; i < 5; ++i) { QPieSlice *slice = new QPieSlice; slice->setValue(m_sliceInfo.value.at(QRandomGenerator::global()->bounded(0, 6))); slice->setLabel(m_sliceInfo.label.at(QRandomGenerator::global()->bounded(0, 6))); slice->setLabelColor(m_sliceInfo.color.at(QRandomGenerator::global()->bounded(0, 6))); m_pieSeries->append(slice); } m_pieSeries->setLabelsVisible(true); ...
- Die Funktion
appendSlice
erstellt eine QPieSlice, legt einige ihrer Eigenschaften fest und fügt sie dann an die Kuchenserie an.Beachten Sie, dass, auch wenn Sie die Sichtbarkeit der Beschriftungen auf
true
gesetzt haben, dies nicht für die später zur Kuchenserie hinzugefügten Slices gilt. Sie müssen die Sichtbarkeit bei der Erstellung für jedes hinzugefügte Slices auftrue
setzen.QPieSlice *slice = new QPieSlice; slice->setValue(m_sliceInfo.value.at(QRandomGenerator::global()->bounded(0, 6))); slice->setLabel(m_sliceInfo.label.at(QRandomGenerator::global()->bounded(0, 6))); slice->setLabelColor(m_sliceInfo.color.at(QRandomGenerator::global()->bounded(0, 6))); slice->setLabelVisible(true); m_pieSeries->append(slice);
- Rufen Sie in der Funktion
removeSlice
QPieSeries::remove () auf. - Führen Sie in der Funktion
explodeSlices
eine Schleife durch alle Slices und setzen Sie QPieSlice::setExploded() auftrue
oderfalse
, je nach aktuellem Status. - Rufen Sie in der Funktion
clearSeries
QPieSeries::clear () auf. Dadurch werden alle Slices aus Ihrer Tortenreihe gelöscht. Beachten Sie, dass diese Funktion die Tortenreihe selbst nicht löscht.
Deklarieren einer GraphView in Qml
Deklarieren Sie ein GraphsView Element und setzen Sie die seriesList Eigenschaft auf eine in C++ Code erstellte Tortenreihe.
Um das Thema GraphsView anzupassen, legen Sie ein benutzerdefiniertes GraphsTheme fest.
Item { id: mainView width: 1280 height: 720 GraphsView { id: graphsView anchors.fill: parent theme: GraphsTheme { id: graphsTheme theme: GraphsTheme.Theme.BlueSeries labelBorderVisible: true labelBackgroundVisible: true backgroundColor: "black" } seriesList: pieGraph.pieSeries } }
© 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.