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

相关推荐
可涵不会debug11 分钟前
C++ std::bind 实战教程:线程池、回调场景全覆盖
linux·开发语言·c++
阿钱真强道30 分钟前
24 嵌入式操作系统 | 项目启动与环境准备(PyQt5 / Flask 两个“最小可跑“)
开发语言·qt·flask·架构设计·协议契约
青梅味猪大肠1 小时前
【操作系统-26】进程互斥软件实现-Peterson算法
linux·运维·服务器
wdfk_prog1 小时前
Wi-Fi Direct教程 01:在 Ubuntu 搭建双 mac80211_hwsim + wpa_supplicant 2.12
linux·运维·服务器·ubuntu·ros·wifi-direct
Vcaker2 小时前
Linux学习36-k8s集群升级及kube-vip高可用
linux·运维·学习
skywalk81633 小时前
Deepseek harness的4种模式 配置文件内容
linux·人工智能·ubuntu·deepseek·harness
沫璃染墨3 小时前
《从零入门Linux系统篇(五十一):线程篇·四——pthread线程库详解:从线程创建到终止与分离》
linux·运维·服务器·开发语言·c++·系统架构·线程
YYRAN_ZZU3 小时前
GMSL开发加解串配置介绍
linux·嵌入式硬件
云计算练习生3 小时前
什么是上下文切换?进程切换时 CPU 到底在保存什么
linux·服务器·操作系统·进程切换
用户0510122572963 小时前
RGA(二)——RK3588 的核拓扑与能力差异
linux·嵌入式