C++ Qt setUseOpenGL(true)和removeSeries()不更新QChart 问题
我使用的是Qt折线图,这个QLineChart可以加载和删除数据,而不会出现CPU渲染问题。但是,使用setUseOpenGL时,QChart removeSeries()无法正确更新我的QLineChart(true)。删除的数据仍在QChart上可见。奇怪的是,当鼠标悬停在QChart上时,QChart会被更新,数据也会被删除 预期结果 调用removeSeries()后更新QChart 观察结果 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
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));
,我会继续寻找更好的解决方案。非常感谢,这确实解决了问题!