问题
我正在使用Qt LineChart,此QLineChart可以加载和删除数据,而不会影响CPU渲染。但是,使用setUseOpenGL(true)时,QChart removeSeries()无法正确更新我的QLineChart。删除的数据仍在QChart上可见。奇怪的是,将鼠标悬停在QChart上时,QChart会更新并删除数据。
预期结果
调用removeSeries()后更新QChart。
观察结果
QChart未更新。
我尝试过的
我全都没主意了。欢迎所有建议。相关代码:
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;
最佳答案
我已经检查了问题,现在我有了一个临时的解决方案,而且不是很好,它可能会有所进步,我注意到在调整图表大小时会更新图表,因此这是一个可以帮助您的代码:
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();
}
关于c++ - Qt setUseOpenGL(true)和removeSeries()不更新QChart,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45765620/