解决QPixmap报“QPixmap::grabWindow(): Unable to copy pixels from framebuffer“问题
今天在使用QPixmap::grabWindow()截图时,弹出“QPixmap::grabWindow(): Unable to copy pixels from framebuffer”错误。
问题原因:QPixmap::grabWindow()这个函数适用于Qt5版本截屏,但该函数在Qt4上表现不稳定,经常出现“Unable to copy pixels from framebuffer”错误。
解决方法:建议改成QPixmap::grabWidget()来进行截图。
详细步骤,请查看第2节【修复代码B】。
1 原始代码A
#include <QApplication>
#include <QPixmap>
#include <QScreen>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 获取当前活动窗口的 IDWId windowId = QApplication::activeWindow()->winId();// 捕获窗口截图QPixmap screenshot = QPixmap::grabWindow(windowId); //此处经常报错,偶尔可用,但不稳定if (screenshot.isNull()) {qDebug() << "Failed to grab window screenshot.";} else {// 保存截图screenshot.save("screenshot.png");qDebug() << "Window screenshot saved successfully.";}return a.exec();
}
2 修复代码B
#include <QApplication>
#include <QPixmap>
#include <QScreen>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 获取当前活动窗口的 IDWId windowId = QApplication::activeWindow()->winId();// 捕获窗口截图//修复如下QRect rect = QApplication::desktop()->screenGeometry();QPixmap screenshot = QPixmap::grabWidget(QApplication::desktop(),rect); if (screenshot.isNull()) {qDebug() << "Failed to grab window screenshot.";} else {// 保存截图screenshot.save("screenshot.png");qDebug() << "Window screenshot saved successfully.";}return a.exec();
}
参考文献:
【1】 github.2015.mumble-voip.修复QPixmap::grabWindow()报错