Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt setUseOpenGL(true)和removeSeries()不更新QChart 问题_C++_Qt_Qt5 - Fatal编程技术网

C++ Qt setUseOpenGL(true)和removeSeries()不更新QChart 问题

C++ Qt setUseOpenGL(true)和removeSeries()不更新QChart 问题,c++,qt,qt5,C++,Qt,Qt5,我使用的是Qt折线图,这个QLineChart可以加载和删除数据,而不会出现CPU渲染问题。但是,使用setUseOpenGL时,QChart removeSeries()无法正确更新我的QLineChart(true)。删除的数据仍在QChart上可见。奇怪的是,当鼠标悬停在QChart上时,QChart会被更新,数据也会被删除 预期结果 调用removeSeries()后更新QChart 观察结果 QChart未更新 我试过的 调用ChartView重新绘制()--无效 发射自定义QEven

我使用的是Qt折线图,这个QLineChart可以加载和删除数据,而不会出现CPU渲染问题。但是,使用setUseOpenGL时,QChart removeSeries()无法正确更新我的QLineChart(true)。删除的数据仍在QChart上可见。奇怪的是,当鼠标悬停在QChart上时,QChart会被更新,数据也会被删除

预期结果 调用removeSeries()后更新QChart

观察结果 QChart未更新

我试过的
  • 调用ChartView重新绘制()--无效
  • 发射自定义QEvent以模拟鼠标悬停在QChart上--无效果
  • 将包含QChartView的小部件设置为FullViewportUpdate--无效
  • 我完全没有主意了。欢迎所有建议。相关代码:

    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;
    
    QLineSeries*series3=data->getScanLineSeries();
    series3->setUseOpenGL(真);
    如果(数据->getLineSeriesOnChart()==false)
    ...
    {
    图表->添加系列(系列3);
    数据->setLineSeriesOnChart(真);
    标准::cout setLineSeriesOnChart(假);
    
    qDebug()我已经检查了这个问题,现在我有了一个临时解决方案,但不是很优雅,它可能有助于改进,我注意到当您调整图表大小时,图表会更新,那么这是一个可以帮助您的代码:

    chartView->resize(chartView->size() + QSize(1, 1)); 
    chartView->resize(chartView->size() - QSize(1, 1));
    
    我会继续寻找更好的解决方案

    例如:

    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();
    }
    
    intmain(intargc,char*argv[])
    {
    质量保证申请a(argc、argv);
    QLineSeries*系列=新的QLineSeries();
    系列->附加(0,6);
    系列->附加(2,4);
    系列->附加(3,8);
    系列->附加(7,4);
    系列->附加(10,5);
    *系列createDefaultAxes();
    图表->设置标题(“简单折线图示例”);
    QChartView*图表视图=新的QChartView(图表);
    图表视图->SetRenderInt(QPaint::抗锯齿);
    定时器;
    QObject::connect(&timer,&QTimer::timeout,[chart,series,chartView](){
    qDebug()系列().isEmpty())
    图表->远程系列(系列);
    其他的
    图表->添加系列(系列);
    图表视图->调整大小(图表视图->大小()+QSize(1,1));
    图表视图->调整大小(图表视图->大小()-QSize(1,1));
    });
    定时器启动(1000);
    qmain窗口;
    setCentralWidget(图表视图);
    调整窗口大小(400300);
    window.show();
    返回a.exec();
    }
    
    我已经检查了这个问题,现在我有了一个临时解决方案,但不是很优雅,它可能有助于改进,我注意到在调整图像大小时图表会更新,然后这是一个可以帮助您的代码:
    chartView->resize(chartView->size()+QSize(1,1));chartView->resize(chartView->size()-QSize(1,1));
    ,我会继续寻找更好的解决方案。非常感谢,这确实解决了问题!