Qt 5.7 中引入了 QtChart 模块。利用 QtChart 模块可以很容易的在程序中画出各种漂亮的图表. 这些漂亮的图表除了在界面上显示之外, 还经常需要保存为图片,以便后续使用. 这篇博客就来讲讲如何将 Chart 保存到图片中.
其实这是个小问题, 只需要两三行代码. 但是 QChartView 这个类没有提供这么个函数. 所以要实现这么个小功能还真要考验大家对 Qt 的掌握水平了.
我才用的方法是使用 QScreen 的:
QPixmap QScreen::grabWindow(WId window, int x = 0, int y = 0, int width = -1, int height = -1)
这个方法. 用这个方法,只要有 WId ,那么什么窗口的图像都可以获取.
QChartView 继承自 QWidget, 用 winId() 函数就可以获得 WId.
下面是个最简单的代码片段, 描述了如何将一个QChartView 的图像保存到 chart.png 文件中:
QScreen * screen = QGuiApplication::primaryScreen();
QPixmap p = screen->grabWindow(view->winId());
QImage image = p.toImage();
image.save("chart.png");
下面是我用这个方法获得的一个图像. 在获得这个图片之前,我故意将这个chart view 窗口挪出了屏幕. 经测试,这样也并不影响我获得正确的图片.
按照我这个思路, 只要是继承自 QWidget 的窗口,都可以保存为图片.