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

相关推荐
LongRunning13 小时前
【Linux】RK3568-OpenCV+YOLO(八)
linux·opencv·yolo
MOONICK13 小时前
QT元数据
开发语言·qt
民乐团扒谱机16 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
물の韜17 小时前
ZYNQ/FMQL系列Linux之I2C开发实战
linux·arm开发·嵌入式硬件·设备树·iic·zynq
qq_3718021117 小时前
Ubuntu Linux中安装WorkBuddy
linux·运维·服务器·ubuntu
无足鸟ICT17 小时前
【RHCA+】iptraf-ng(网络监控分析)
linux·网络
独隅17 小时前
WebStorm 在 Linux 环境下的实战安装与高效开发指南
linux·ide·webstorm
坤坤子吖19 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
阡陌数智19 小时前
Claude API新版本重大变更与安全升级指南
java·linux·安全
奶茶树19 小时前
【Linux】环境开发工具(vim,gcc,g++,Makefile)
linux·运维·vim