ライトマーカーとポイントの選択

注:これは 「ウィジェット付きチャート ギャラリー」のサンプルの一部です。

線の色や、選択されたデータの色の変更、および選択されていないデータの表示ができる折れ線グラフの例を示すスクリーンショット

線の色や、選択されたデータの色の変更、および選択されていないデータの表示が可能である線グラフの別の例を示すスクリーンショット

まず、シリーズを作成し、データを設定して、選択機能をセットアップします。ライトマーカー機能は独立した機能であるため、ポイントの可視性を「true 」に設定しないことが重要です。両方を設定すると、予期しない動作を引き起こす可能性があります。

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

次に、QChart 、QChartview 、およびカスタマイズ要素を配置するためのレイアウトを備えたコントロールウィジェットを作成します。

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

次のステップは、カスタマイズ要素の作成です。

auto charPointCombobox = new QComboBox(controlWidget);
auto charPointSelectedCombobox = new QComboBox(controlWidget);
auto lineColorCombobox = new QComboBox(controlWidget);
auto showUnselectedPointsCheckbox = new QCheckBox(controlWidget);

マーカー選択用コンボボックスのラベルを作成し、コンボボックスに項目を追加して内容を設定します。また、コンボボックスに機能を実装します。ライトマーカー機能の実装を考慮して、選択されていないポイントの表示が有効になっているかどうかを確認する必要があります。 ライトマーカーの表示をオフにするには、`"empty" ` に設定します。QImage 。ユーザーが「選択されていない点の表示」のチェックを外し、ライトマーカーの画像を変更した場合、選択されていない点は非表示のままである必要があります。このチェックが行われない場合、ライトマーカーに新しい `QImage ` が設定され、オフに設定されていても選択されていない点が表示されてしまいます。

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

選択済みポイントのライトマーカーや線の色についても、ほぼ同様の手順が適用されます。唯一の違いは、機能に影響を与えないため、非選択ポイントの可視性を確認する必要がないという点です。

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

選択されていない点の表示/非表示を変更する際には、わずかな違いが生じます。前述の通り、ライトマーカーを非表示にするには、QImage を「empty」に設定します。そのため、チェックボックスの状態に応じて、選択された点のライトマーカーはQImage を「empty」に設定するか、対応するコンボボックスの現在のインデックスから抽出されたライトマーカーに設定されます。

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

最後の工程として、要素の配置を行い、すべてのウィジェットをメインウィジェットに追加し、メインウィンドウのサイズを設定します。

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.