首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt setUseOpenGL(true)和removeSeries()不更新QChart

Qt setUseOpenGL(true)和removeSeries()不更新QChart
EN

Stack Overflow用户
提问于 2017-08-18 22:08:13
回答 1查看 859关注 0票数 3

问题

我使用的是Qt LineChart,这个QLineChart可以加载和删除数据,而不会出现在CPU呈现上的问题。但是,QChart removeSeries()在使用setUseOpenGL(true)时没有正确地更新QLineChart。删除的数据在QChart上仍然可见。奇怪的是,当鼠标悬停在QChart上时,QChart会被更新并删除数据。

预期结果

在调用QChart ()之后更新removeSeries。

观测结果

QChart没有更新。

我试过的

  1. 调用ChartView重绘()-无效果
  2. 发出自定义QEvent以模拟鼠标在QChart上的悬停--没有效果
  3. 将包含QChartView的Widget设置为FullViewportUpdate --没有效果

我没什么主意了。欢迎所有建议。相关守则:

代码语言:javascript
复制
QLineSeries *series3= data->getScanLineSeries();
series3->setUseOpenGL(true);
if(data->getLineSeriesOnChart() == false)
...
{
    chart->addSeries(series3);
    data->setLineSeriesOnChart(true);
    std::cout << "Series added to chart.";
    qDebug() << QString("Series added to chart");
}
else
{
    chart->removeSeries(series3);
    data->setLineSeriesOnChart(false);
    qDebug() << QString("ERROR: this series was already on the chart, removing QLineSeries");
    return chart;
}
...
(axes handling)
return chart;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-18 23:49:37

我已经检查了这个问题,现在我有了一个临时的解决方案,而且不是很优雅,它可能会起到促进作用,我注意到当您调整图表的大小时会更新图表,那么这是一个可以帮助您的代码:

代码语言:javascript
复制
chartView->resize(chartView->size() + QSize(1, 1)); 
chartView->resize(chartView->size() - QSize(1, 1));

我会继续寻找更好的解决方案

示例:

代码语言:javascript
复制
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QLineSeries *series = new QLineSeries();

    series->append(0, 6);
    series->append(2, 4);
    series->append(3, 8);
    series->append(7, 4);
    series->append(10, 5);
    *series << QPointF(11, 1) << QPointF(13, 3) << QPointF(17, 6) << QPointF(18, 3) << QPointF(20, 2);

    series->setUseOpenGL(true);

    QChart *chart = new QChart();
    chart->legend()->hide();
    chart->addSeries(series);
    chart->createDefaultAxes();
    chart->setTitle("Simple line chart example");

    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);

    QTimer timer;
    QObject::connect(&timer, &QTimer::timeout, [chart, series, chartView](){
        qDebug()<<chart->series();
        if(!chart->series().isEmpty())
            chart->removeSeries(series);
        else
            chart->addSeries(series);
        chartView->resize(chartView->size()+QSize(1, 1));
        chartView->resize(chartView->size()-QSize(1, 1));
    });

    timer.start(1000);

    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(400, 300);
    window.show();

    return a.exec();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45765620

复制
相关文章

相似问题

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