首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使QLineSeries/ only系列只显示一个点标签

如何使QLineSeries/ only系列只显示一个点标签
EN

Stack Overflow用户
提问于 2019-11-05 08:46:09
回答 1查看 1.2K关注 0票数 1

我正在使用qtcharts图模块的qt

我正在使用/问题/加标签/c%2b%2b,但是解决方案是否需要另一种语言并不重要(稍后我会翻译它)。

问题:--我在QChart中绘制了一堆QLineSeries,我只想在将它们悬停时才显示点标签。

我计划使用信号QXYSeries::hovered()来检测鼠标何时在点上移动(当鼠标移开点时也是如此)。

我知道存在一个成员函数QXYSeries::setPointLabelsVisible(),但它可以显示该系列的所有要点。

我想一次只能显示一个点,因为系列相对比较大,显示所有标签会降低可读性。

问题:是否可以只显示QLineSeries的一个点标签?如果是,怎么做?

我在Qt文档中任何地方都找不到这样的特性。

下面是一个基线代码示例(为了方便起见):

声明

代码语言:javascript
复制
#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

    public:
        MainWindow();
};

定义

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

发布于 2020-09-22 12:42:14

你可以尝试的一种技术是用你需要的一个或几个点制作一个线系列的“影子”拷贝,坐在实际数据线的上方。用一支透明的笔画,这样线就不会出现,而是将标签设置为可见的。可以将/移除/更改点添加到行系列的阴影副本中,并且只有要绘制的标签才能添加到该系列中。该链接显示一个这种技术的例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58707516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档