Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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渲染图表不更新标题/图例_C++_Qt_Rendering_Qtcharts - Fatal编程技术网

C++ qt渲染图表不更新标题/图例

C++ qt渲染图表不更新标题/图例,c++,qt,rendering,qtcharts,C++,Qt,Rendering,Qtcharts,我正在尝试使用以下简化代码将QChartView渲染为.png图像: QChartView *chartView = /* pointer to chart view */; const auto dpr = chartView->devicePixelRatioF(); chartView->setMinimumSize(500, 500); chartView->setMaximumSize(500, 500); QImage image(500, 500, QImage:

我正在尝试使用以下简化代码将QChartView渲染为.png图像:

QChartView *chartView = /* pointer to chart view */;
const auto dpr = chartView->devicePixelRatioF();
chartView->setMinimumSize(500, 500);
chartView->setMaximumSize(500, 500);
QImage image(500, 500, QImage::Format_ARGB32_Premultiplied);
image.setDevicePixelRatio(dpr);
QPainter painter(&image);
painter.setRenderHint(QPainter::Antialiasing);
chartView->render(&painter);
image.save('image.png');
它工作正常,并按预期保存图像。 但是,如果在渲染前尝试更改标题,则不会显示标题:

QChartView *chartView = /* pointer to chart view */;
const auto dpr = chartView->devicePixelRatioF();
chartView->setMinimumSize(500, 500);
chartView->setMaximumSize(500, 500);
chartView->chart()->setTitle("my title"); // <--- HERE
QImage image(500, 500, QImage::Format_ARGB32_Premultiplied);
image.setDevicePixelRatio(dpr);
QPainter painter(&image);
painter.setRenderHint(QPainter::Antialiasing);
chartView->render(&painter);
image.save('image.png');
但是,如果我创建了一个显示标题的按钮,以及一个应该保存图像的按钮,我首先单击按钮显示标题,然后单击按钮保存图像,它就会工作。也就是说,如果我将这两个步骤分开,使图表显示在GUI中,它就可以工作了

当我试图展示一个传奇时也是如此

更新:我添加了一个完整的最小示例来重现问题:


创建的图像noLabels.png和withLabels.png均不显示标题或图例

当您设置标题或显示图例时,事件似乎已排队并在稍后进行处理。设置标题并显示图例后,可以通过调整图表视图的大小来强制执行这些操作:

chart->setTitle("title");
chart->legend()->show();
chartView->resize(QSize(500,500));
chartView->grab().toImage().save("withLabels.png");

设置标题前是否尝试使用“重新绘制”?

尝试“图表视图”->“grab.toImage.saveimage.png”;而不是使用QPainter。嗨,谢谢你的提示。你的代码比我的简单得多,也更直截了当。不幸的是,这并不能解决我的问题。重新绘制没有帮助。谢谢,调整大小起了作用。我马上就接受你的回答。最后一件事:我在循环中创建这些图像。为了使用您的解决方案,我必须两次调整图表视图的大小,以便它在每次迭代时真正改变大小。我正在使用Resize499499,然后是Resize500500,它可以工作,但对其他人来说有点让人困惑。还有更优雅的解决方案吗?@user7431005另一个解决方案是调用qApp->processEventsQEventLoop::AllEvents;而不是调整大小。
chart->setTitle("title");
chart->legend()->show();
chartView->resize(QSize(500,500));
chartView->grab().toImage().save("withLabels.png");