Utilisation des marqueurs lumineux et de la sélection de points
Remarque : ceci fait partie de l'exemple « Charts with Widgets Gallery ».


Nous commençons par créer une série, la remplir avec les données et configurer la fonctionnalité de sélection. Il est important de ne pas définir la visibilité des points sur « true », car la fonctionnalité des marqueurs lumineux est indépendante et le fait de configurer les deux entraînerait un comportement indésirable.
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});
});Nous créons ensuite l’ QChart, l’ QChartview et le widget de contrôle avec sa mise en page pour organiser les éléments de personnalisation.
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);L’étape suivante consiste à créer les éléments de personnalisation.
auto charPointCombobox = new QComboBox(controlWidget);
auto charPointSelectedCombobox = new QComboBox(controlWidget);
auto lineColorCombobox = new QComboBox(controlWidget);
auto showUnselectedPointsCheckbox = new QCheckBox(controlWidget);Nous créons l’étiquette de la liste déroulante de sélection des marqueurs et remplissons cette liste avec les éléments. Nous ajoutons également des fonctionnalités à cette liste déroulante. Compte tenu de la mise en œuvre de la fonctionnalité des marqueurs lumineux, nous devons vérifier si l’affichage des points non sélectionnés est activé. Pour désactiver la visibilité du marqueur lumineux, il suffit de définir la propriété « "empty" » de l’ QImage. Si l’utilisateur désactive l’affichage des points non sélectionnés et modifie l’image du marqueur lumineux, les points non sélectionnés doivent rester invisibles. Si cette vérification n’est pas effectuée, une nouvelle QImage sera définie pour le marqueur lumineux et les points non sélectionnés resteront visibles même si l’affichage a été désactivé.
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));
});La procédure est pratiquement identique pour le marqueur lumineux des points sélectionnés et la couleur des lignes. La seule différence réside dans le fait qu’il n’est pas nécessaire de vérifier la visibilité des points non sélectionnés, car cela n’affecte pas le fonctionnement.
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)));
});Une légère différence apparaît lors de la modification de la visibilité des points non sélectionnés. Comme mentionné précédemment, pour rendre les marqueurs lumineux invisibles, il suffit de leur attribuer la valeur « vide » QImage. C’est pourquoi, selon l’état de la case à cocher, le marqueur lumineux du point sélectionné est défini sur « vide » QImage ou sur le marqueur lumineux extrait de l’index actuel de la liste déroulante correspondante.
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());
});La dernière étape consiste à organiser les éléments, à ajouter tous les widgets au widget principal et à définir la taille de la fenêtre principale.
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.