Verwendung von Lichtmarkern und der Punkteauswahl
Hinweis: Dies ist Teil des Beispiels „Diagramme mit Widgets“ aus der Galerie.


Wir beginnen damit, eine Reihe zu erstellen, diese mit Daten zu füllen und die Auswahlfunktion einzurichten. Es ist wichtig, die Sichtbarkeit der Punkte nicht auf „ true “ zu setzen, da die Funktion der hellen Markierungen eine eigenständige Funktion ist und die gleichzeitige Einstellung beider Optionen zu unerwünschtem Verhalten führen würde.
constexpr qreal marker_size = 20.;
auto series = new QSplineSeries;
series->append({QPointF(0., 0.),
QPointF(0.5, 2.27),
QPointF(1.5, 2.2),
QPointF(3.3, 1.7),
QPointF(4.23, 3.1),
QPointF(5.3, 2.3),
QPointF(6.47, 4.1)
});
series->setMarkerSize(marker_size);
series->setLightMarker(rectangle(marker_size, Qt::red));
series->setSelectedLightMarker(blueTriangle(marker_size));
QObject::connect(series, &QXYSeries::clicked, series, [=](const QPointF &point) {
int index = series->points().indexOf(point);
if (index != -1)
series->toggleSelection({index});
});Anschließend erstellen wir die „ QChart “, die „ QChartview “ sowie das Steuerelement-Widget mit seinem Layout, um die Anpassungselemente anzuordnen.
auto chart = new QChart;
chart->addSeries(series);
chart->createDefaultAxes();
chart->legend()->setVisible(false);
chart->layout()->setContentsMargins(0, 0, 0, 0);
chart->setTitle("Select points with mouse click");
auto chartView = new QChartView(chart, this);
chartView->setRenderHint(QPainter::Antialiasing);
auto controlWidget = new QWidget(this);
auto controlLayout = new QGridLayout(controlWidget);Der nächste Schritt ist die Erstellung der Anpassungselemente.
auto charPointCombobox = new QComboBox(controlWidget);
auto charPointSelectedCombobox = new QComboBox(controlWidget);
auto lineColorCombobox = new QComboBox(controlWidget);
auto showUnselectedPointsCheckbox = new QCheckBox(controlWidget);Wir erstellen die Beschriftung für die Kombinationsfeld zur Markerauswahl und füllen das Kombinationsfeld mit den Elementen. Außerdem statten wir das Kombinationsfeld mit Funktionen aus. Im Hinblick auf die Implementierung der „Light Markers“-Funktionalität müssen wir sicherstellen, dass die Anzeige nicht ausgewählter Punkte aktiviert ist. Das Deaktivieren der Sichtbarkeit des Leuchtmarkers erfolgt durch die Einstellung „ "empty" “ im „ QImage “. Wenn der Benutzer die Anzeige nicht ausgewählter Punkte deaktiviert und das Bild des Leuchtmarkers ändert, müssen nicht ausgewählte Punkte unsichtbar bleiben. Wird diese Überprüfung nicht durchgeführt, wird ein neuer „ QImage “ für den Leuchtmarker festgelegt, und nicht ausgewählte Punkte sind sichtbar, obwohl die Anzeige deaktiviert wurde.
auto charPoint = new QLabel(tr("Char point: "), controlWidget);
charPointCombobox->addItems({tr("Red rectangle"),
tr("Green triangle"),
tr("Orange circle")
});
QObject::connect(charPointCombobox, &QComboBox::currentIndexChanged, series, [=](const int index) {
if (showUnselectedPointsCheckbox->isChecked())
series->setLightMarker(getPointRepresentation(PointType(index), marker_size));
});Fast das gleiche Verfahren gilt für die Lichtmarkierung des ausgewählten Punktes und die Linienfarbe. Der einzige Unterschied besteht darin, dass die Sichtbarkeit nicht ausgewählter Punkte nicht überprüft werden muss, da dies keinen Einfluss auf die Funktionalität hat.
auto charPointSelected = new QLabel(tr("Char point selected: "), controlWidget);
charPointSelectedCombobox->addItems({tr("Blue triangle"),
tr("Yellow rectangle"),
tr("Lavender circle")
});
QObject::connect(charPointSelectedCombobox, &QComboBox::currentIndexChanged, series, [=](const int index) {
series->setSelectedLightMarker(getSelectedPointRepresentation(SelectedPointType(index), marker_size));
});
auto lineColorLabel = new QLabel(tr("Line color: "), controlWidget);
lineColorCombobox->addItems({tr("Blue"),
tr("Black"),
tr("Mint")
});
QObject::connect(lineColorCombobox, &QComboBox::currentIndexChanged, series, [=](const int index) {
series->setColor(makeLineColor(LineColor(index)));
});Ein kleiner Unterschied ergibt sich bei der Änderung der Sichtbarkeit nicht ausgewählter Punkte. Wie bereits erwähnt, werden Lichtmarkierungen unsichtbar gemacht, indem sie auf „leer“ gesetzt werden QImage. Aus diesem Grund wird die Lichtmarkierung des ausgewählten Punktes je nach Status des Kontrollkästchens entweder auf „leer“ QImage oder auf die Lichtmarkierung gesetzt, die aus dem aktuellen Index der entsprechenden Kombinationsbox extrahiert wurde.
auto showUnselectedPointsLabel = new QLabel(tr("Display unselected points: "), controlWidget);
showUnselectedPointsCheckbox->setChecked(true);
QObject::connect(showUnselectedPointsCheckbox, &QCheckBox::stateChanged, series, [=](const int state) {
if (state)
series->setLightMarker(getPointRepresentation(PointType(charPointCombobox->currentIndex()), marker_size));
else
series->setLightMarker(QImage());
});Der letzte Schritt besteht darin, die Elemente anzuordnen, alle Widgets zum Haupt-Widget hinzuzufügen und die Größe des Hauptfensters festzulegen.
controlLayout->addWidget(charPoint, 0, 0);
controlLayout->addWidget(charPointCombobox, 0, 1);
controlLayout->addWidget(charPointSelected, 1, 0);
controlLayout->addWidget(charPointSelectedCombobox, 1, 1);
controlLayout->addWidget(lineColorLabel, 2, 0);
controlLayout->addWidget(lineColorCombobox, 2, 1);
controlLayout->addWidget(showUnselectedPointsLabel, 3, 0);
controlLayout->addWidget(showUnselectedPointsCheckbox, 3, 1, 1, 2);
m_mainWidget = new QWidget(this);
auto mainLayout = new QHBoxLayout(m_mainWidget);
mainLayout->addWidget(chartView);
mainLayout->addWidget(controlWidget);© 2026 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.