Как сделать метку только одной точки видимой для QLineSeries / QXYSeries - PullRequest
0 голосов
/ 05 ноября 2019

Я использую модуль . Я использую , но не имеет значения, будет ли найдено решение для другого языка (я переведу его позже).

Проблема: Я строю связку QLineSeries в QChart и хочу отображать метки точек только при наведении на них.

Я планировал использовать сигнал QXYSeries::hovered(), чтобы определить, когдамышь перемещается по точке (то же самое, когда мышь удаляет точку).

Я знаю, что существует функция-член QXYSeries::setPointLabelsVisible(), но она делает видимыми все точкисерии.

Я хочу иметь возможность отображать только одну точку за раз, потому что серии относительно велики, а отображение всех меток ухудшит читабельность.

Вопрос: Можно ли отобразить только одну точку метки для QLineSeries? Если да, то как? Я не смог найти такую ​​возможность нигде в документации Qt.


Вот базовый пример кода, с которого можно начать (для удобства):

Объявление :

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

    public:
        MainWindow();
};

Определение :

#include <QApplication>
#include <QLineSeries>
#include <QDateTimeAxis>
#include <QValueAxis>
#include <QChartView>
#include <QDateTime>

int main(int argc, char ** argv)
{
    QApplication app(argc, argv);

    MainWindow w;
    w.show();

    return app.exec();
}

MainWindow::MainWindow()
{
    setWindowTitle("QtCharts baseline");
    resize(800, 500);

    QtCharts::QChart * chart = new QtCharts::QChart;
    chart->setTitle("Baseline sample");
    chart->legend()->setAlignment(Qt::AlignRight);

    QtCharts::QDateTimeAxis * time_axis = new QtCharts::QDateTimeAxis;
    time_axis->setFormat("hh:mm:ss");
    time_axis->setTitleText("Time");
    time_axis->setTickCount(5);

    QtCharts::QValueAxis * value_axis = new QtCharts::QValueAxis;
    value_axis->setTitleText("Value (unit)");
    value_axis->setTickCount(6);

    chart->addAxis(time_axis, Qt::AlignBottom);
    chart->addAxis(value_axis, Qt::AlignLeft);

    QtCharts::QLineSeries * ls = new QtCharts::QLineSeries;
    ls->setName("Test series");
    ls->setPointsVisible(true);
    //ls->setPointLabelsVisible(true);

    QDateTime dt = QDateTime::currentDateTime();
    ls->append(dt.toMSecsSinceEpoch(), -10);
    ls->append(dt.addSecs(1).toMSecsSinceEpoch(), 8);
    ls->append(dt.addSecs(2).toMSecsSinceEpoch(), 27);
    ls->append(dt.addSecs(3).toMSecsSinceEpoch(), 12);
    ls->append(dt.addSecs(4).toMSecsSinceEpoch(), 42);
    chart->addSeries(ls);
    ls->attachAxis(time_axis);
    ls->attachAxis(value_axis);

    QtCharts::QChartView * view = new QtCharts::QChartView;
    view->setChart(chart);
    this->setCentralWidget(view);
}
...