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

相关推荐
小短腿的代码世界14 小时前
Qt Bluetooth源码深度解析:从HCI协议到跨平台API的完整架构
开发语言·qt·架构
艾莉丝努力练剑14 小时前
OpenCode AI 编程:Ubuntu 24.04 环境安装与使用指南
linux·服务器·网络·人工智能·tcp/ip·ubuntu
崇山峻岭之间14 小时前
Keil5输出hex转换为bin的设置
linux·运维·服务器
小短腿的代码世界15 小时前
Qt WebEngine多进程架构与IPC通信:从Chromium多进程到Qt信号槽融合
qt·架构·系统架构
谷雪_65815 小时前
Linux 网络命名空间:从内核原理到企业级容器网络架构全景实战
linux·网络·架构
qq_1631357516 小时前
Linux 【03- chgrp命令超详细教程】
linux
CodeStats16 小时前
【编程语言】深度梳理C/C++、Java、Python、Go、Rust的区别
java·linux·c语言·c++·python·rust·go
尘中远16 小时前
【Qwt 7.0 系列】快速入门与核心新特性概览 —— 更现代的 Qt 数据可视化库
qt·数据可视化·绘图·qwt·科学绘图
我会尽全力 乐观而坚强17 小时前
MySQL库与表的操作
linux·数据库·mysql
着迷不白17 小时前
Linux 磁盘管理完全指南:分区、文件系统、挂载与 LVM 实战
linux·运维·服务器