当前位置: 首页 > article >正文

解决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);

    // 获取当前活动窗口的 ID
    WId 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);

    // 获取当前活动窗口的 ID
    WId windowId = QApplication::activeWindow()->winId();

    // 捕获窗口截图
    //修复如下
    QRect rect= QApplication::desktop()->screenGeometry();
    QPixmap qpScreen = 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()报错


http://www.kler.cn/a/544503.html

相关文章:

  • 时间盲注和boolen盲注中获取表,列以及具体数据的函数
  • 微服务架构,Spring Cloud、Kubernetes 以及云厂商(AWS、Azure)的管理方式
  • 使用 LangChain 对接硅基流动(SiliconFlow)API:构建一个智能对话系统
  • 哈尔滨算力服务器托管服务
  • JUC并发—2.Thread源码分析及案例应用
  • wordpress主题制作
  • 安全测试|SSRF请求伪造
  • Docker 常用命令基础详解(一)
  • 微信服务号推送消息
  • 【Linux】玩转Linux操作系统(四)文本处理
  • 从当下到未来:蓝耘平台和 DeepSeek 应用实践的路径探索,勾勒 AI 未来新蓝图
  • Golang的消息队列架构
  • VS2022中.Net Api + Vue 从创建到发布到IIS
  • cap2:1000分类的ResNet的TensorRT部署指南(python版)
  • CentOS-Stream 9更换RT实时内核
  • webpack研究,解决了什么问题
  • 第二十二章 P - R 开头的术语
  • 文心一言与gpt,核心原理对比
  • React源码揭秘 | scheduler 并发更新原理
  • 《五福临门》后期鉴赏(三)