ライトマーカーとポイント選択の使用
注: これはウィジェット付きチャート・ギャラリーの例の一部です。
まず、系列を作成し、データを入れ、選択機能を設定します。ライトマーカー機能は独立した機能であり、両方を設定すると望ましくない動作になるため、ポイントの可視性を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
に設定されるか、対応するコンボボックスの現在のインデックスから抽出されたライトマーカーに設定されます。
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);
© 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.