QT6 如何在Linux Wayland 桌面系统抓屏和分享屏幕

要在 Linux Wayland 桌面环境下使用 Qt6 实现屏幕抓取和分享,需结合 Qt 原生支持与系统级工具(如 PipeWire、XDG Desktop Portal)。以下是具体方案和技术要点:

Qt6 原生屏幕捕获(QScreenCapture)

适用场景 :需在 Qt 应用程序中直接集成屏幕捕获功能。
核心依赖

  • PipeWire(≥0.3)提供底层多媒体框架24;

  • XDG Desktop Portal 及其后端(如 xdg-desktop-portal-wlr)处理权限和屏幕选择

    安装依赖

  • sudo apt install xdg-desktop-portal xdg-desktop-portal-gtk xdg-desktop-portal-wlr pipewire wireplumber

  • 代码实现

  • 使用 QScreenCapture 类激活捕获会话,Wayland 下无法直接通过 API 选择屏幕,需依赖 Portal 弹窗交互

  • #include <QMediaCaptureSession>

    #include <QScreenCapture>

    #include <QVideoWidget>

    QMediaCaptureSession session;

    QScreenCapture screenCapture;

    QVideoWidget preview;

    // 设置捕获目标(Wayland 下需忽略 setScreen())

    session.setScreenCapture(&screenCapture);

    session.setVideoOutput(&preview);

    screenCapture.setActive(true); // 触发 Portal 屏幕选择向导

  • 限制与注意事项

  • 屏幕选择 :调用 setActive(true) 时,系统会弹出交互式窗口要求用户选择屏幕或区域

  • 仅支持 FFmpeg 后端:需确保 Qt 编译时启用了 FFmpeg4;

  • 实验性功能:Qt 6.5+ 支持 Wayland 捕获,但稳定性可能不足

相关阅读:

神旗视讯 -- 高性能的私有化音视频系统

神旗视讯: 从零搭建高性能信创会议系统

神旗视讯开源地址:

国内: https://gitee.com/sqmeeting

国外: https://github.com/sqmeeting

相关推荐
微露清风5 小时前
系统性学习Linux-第二讲-基础开发工具
linux·运维·学习
不会代码的小猴6 小时前
Linux环境编程第六天笔记--system-V IPC
linux·笔记
阳光九叶草LXGZXJ6 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
诸神缄默不语6 小时前
Linux命令行教程
linux
i建模8 小时前
如何在Arch Linux中重设忘记的root密码
linux·运维·服务器
SilentSlot8 小时前
【QT-QML】5. 简单变换
qt·qml
kida_yuan9 小时前
【Linux】运维实战笔记 — 我常用的方法与命令
linux·运维·笔记
@syh.9 小时前
【linux】进程控制
linux
何中应11 小时前
vmware的linux虚拟机如何设置以命令行方式启动
linux·运维·服务器
江畔何人初11 小时前
kubernet与docker的关系
linux·运维·云原生