Qt 6.6.1 中 QPixmap::grabWindow() 的用法与替代方案

一、Qt 6 中的 API 变化
  1. 弃用 QPixmap::grabWindow()
    在 Qt 6 中,QPixmap::grabWindow() 已被迁移至 QScreen 类,需通过 QScreen::grabWindow() 实现窗口截取‌。
    原因: Qt 6 重构了图形模块,QPixmap 的截屏功能被整合到 QScreen 中以提高多屏幕支持。
二、替代方法 QScreen::grabWindow()
  1. 基本语法

    QScreen *screen = QGuiApplication::primaryScreen();
    QPixmap pixmap = screen->grabWindow(WId windowId, int x=0, int y=0, int width=-1, int height=-1);
    

    windowId:目标窗口的句柄(QWidget::winId() 获取当前窗口的句柄)‌;x, y:截取区域的起始坐标(相对于窗口左上角)‌,width, height:截取区域的尺寸,默认 -1 表示截取至右下角‌。

  2. 典型用例‌   ‌截取当前窗口‌:

    QPixmap pixmap = screen->grabWindow(this->winId());
    

    截取全屏

    QPixmap pixmap = screen->grabWindow(0);  // 参数 0 表示整个屏幕‌:ml-citation{ref="2" data="citationList"}
    

    三、注意事项与常见问题
  3. 跨平台差异

    • Windows‌:需注意窗口边框和客户区坐标差异,建议通过 QWidget::geometry() 获取实际区域‌3;
    • macOS‌:需启用系统偏好设置中的屏幕录制权限,否则截图为黑屏‌。
  4. 截取子控件
    若需截取特定控件(如 QWidget),优先使用 QWidget::grab(),避免直接处理窗口句柄

    QPixmap widgetPixmap = widget->grab();  // 直接截取控件内容‌:ml-citation{ref="5" data="citationList"}
    

  5. 性能与模糊问题

  6. 高分辨率屏幕下可能截取到低质量图像,建议调用 setDevicePixelRatio() 调整缩放比例;
  7. 保存时优先使用无损格式(如 PNG)以减少失真‌.

四、完整示例代码

#include <QGuiApplication>
#include <QScreen>
#include <QWidget>
#include <QFileDialog>void captureWindow(QWidget *targetWidget) {QScreen *screen = QGuiApplication::primaryScreen();WId windowId = targetWidget->winId();// 截取整个窗口(含边框)QPixmap fullWindow = screen->grabWindow(windowId);// 截取窗口客户区(排除边框)QRect clientRect = targetWidget->geometry();QPixmap clientArea = screen->grabWindow(windowId, clientRect.x(), clientRect.y(), clientRect.width(), clientRect.height());// 保存截图QString path = QFileDialog::getSaveFileName(nullptr, "保存截图", "", "PNG Image (*.png)");if (!path.isEmpty()) {clientArea.save(path, "PNG");}
}
五、错误排查
  • 黑屏或空白图像‌:检查权限(macOS/Linux)或窗口是否被其他程序遮挡‌36;
  • 坐标偏移‌:确保截取区域参数基于窗口坐标系,而非屏幕坐标系‌2;
  • Qt 版本兼容性‌:确认项目配置中已包含 gui 和 widgets 模块的依赖‌7。

附:关键函数对比

方法适用场景Qt 版本支持特点
QScreen::grabWindow截取窗口或全屏Qt 5+支持多屏幕,需处理窗口句柄
QWidget::grab截取控件内容Qt 4+无需计算坐标,自动适配控件尺寸

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33741.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

调优案例一:堆空间扩容提升吞吐量实战记录

&#x1f4dd; 调优案例一&#xff1a;堆空间扩容提升吞吐量实战记录 &#x1f527; 调优策略&#xff1a;堆空间扩容三部曲 # 原配置&#xff08;30MB堆空间&#xff09; export CATALINA_OPTS"$CATALINA_OPTS -Xms30m -Xmx30m"# 新配置&#xff08;扩容至120MB&am…

【大模型系列】llama.cpp本地运行大模型

上一篇链接: 【大模型系列】使用ollama本地运行千问2.5模型 我们讲了ollama本地运行大模型&#xff0c;这里我们介绍另一种本地运行大模型的方法&#xff1a;llamacpp 软件下载 下载地址&#xff1a;https://github.com/ggml-org/llama.cpp/releases 下载cpu版本的llamacpp&a…

maven之自定义插件

写在前面 在使用maven肯定是离不开插件的&#xff0c;比如执行mvn clean或者时mvn compile其实运行的就是绑定的默认插件。虽然我们一般不需要来自定义插件&#xff0c;但是为了使用的过程中更加的清晰&#xff0c;来尝试自定义插件还是很有必要的&#xff0c;所以本文就一起来…

工程实践:如何使用SU17无人机来实现室内巡检任务

阿木实验室最近发布了科研开发者版本的无人机SU17&#xff0c;该无人机上集成了四目视觉&#xff0c;三维激光雷达&#xff0c;云台吊舱&#xff0c;高算力的机载计算机&#xff0c;是一个非常合适的平台用于室内外巡检场景。同时阿木实验室维护了多个和无人机相关的开源项目。…

【瞎折腾/Dify】使用docker离线部署Dify

文章目录 说在前面安装Docker(外网)获取Dify源码(外网)拉取docker镜像(外网)导出镜像(内网)导入镜像(内网)运行问题 说在前面 外网操作系统&#xff1a;windows内网操作系统&#xff1a;ubuntu外网docker desktop版本&#xff1a;4.29.0外网docker版本&#xff1a;version 26.0…

【Git】配置Git

配置Git 忽略特殊文件 在日常开发中&#xff0c;有些文件不想或不应该提交到远端&#xff0c;如保存数据库密码的配置文件。 在Git工作区的根目录下创建一个特殊的.gitignore文件&#xff0c;把要忽略的文件名填进去&#xff0c;Git就会自动忽略这些文件。 不需要从头写.gi…

mysql学习-常用sql语句

1、安装mysql参考网上链接&#xff0c;进入mysql数据库 mysql -u root -p 2、数据库操作 2.1、创建数据库 create database 数据库名 default character set utf8; 2.2、显示所有数据库 show databases; 2.3、选择数据库 use elementInfo; 2.4、删除数据库 drop database…

PostgreSQL16 的双向逻辑复制

一、配置 双向逻辑复制具体步骤 参考:PostgreSQL 16 双向逻辑复制与事务回环控制 - 墨天轮 1. 安装和准备环境 确保在所有参与复制的服务器上都安装了 PostgreSQL 16。主服务器&#xff1a;192.168.0.100从服务器&#xff1a;192.168.0.102 2. 配置 PostgreSQL 在每个服务…

FastAPI复杂查询终极指南:告别if-else的现代化过滤架构

title: FastAPI复杂查询终极指南:告别if-else的现代化过滤架构 date: 2025/3/14 updated: 2025/3/14 author: cmdragon excerpt: 本文系统讲解FastAPI中复杂查询条件的构建方法,涵盖参数验证、动态过滤、安全防护等18个核心技术点。通过引入策略模式、声明式编程等技术,彻…

C++前缀和

个人主页&#xff1a;[PingdiGuo_guo] 收录专栏&#xff1a;[C干货专栏] 大家好&#xff0c;今天我们来了解一下C的一个重要概念&#xff1a;前缀和 目录 1.什么是前缀和 2.前缀和的用法 1.前缀和的定义 2.预处理前缀和数组 3.查询区间和 4.数组中某个区间的和是否为特定…

机器学习基础

目录 泛化误差 偏差和方差 噪声 生成模型和判别模型 正态分布&#xff08;Normal Distribution&#xff09; 超参数选择 Grid Search 网格搜索 Random Search 随机搜索 Hyperopt Hyperas 参数估计方法对比 MLE 最大似然估计 MAP最大后验估计 贝叶斯估计 距…

中山六院团队发表可解释多模态融合模型Brim,可以在缺少分子数据时借助病理图像模拟生成伪基因组特征|顶刊解读·25-02-14

小罗碎碎念 在癌症诊疗领域&#xff0c;精准预测患者预后对临床决策意义重大。传统的癌症分期系统&#xff0c;如TNM分期&#xff0c;因无法充分考量肿瘤异质性&#xff0c;难以准确预测患者的临床结局。而基于人工智能的多模态融合模型虽有潜力&#xff0c;但在实际临床应用中…

系统可观测性(5)OpenTelemetry基础使用

系统可观测性(5)OpenTelemetry基础概念 Author: Once Day Date: 2025年3月12日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 本文档翻译整理自《OpenTelemetry Docs》&a…

OpenHarmony自定义子系统、部件与模块

如图所示&#xff0c;OpenHarmony系统源码中&#xff0c;大体上按照不同种类的功能分成多个子系统&#xff0c;然后一个子系统内部进一步在同类功能上的差异性划分成一个或多个部件&#xff0c;也就是说一个部件表示一个具体功能的源码集合。最后一个部件的源码再划分成一个或多…

【论文笔记】Contrastive Learning for Compact Single Image Dehazing(AECR-Net)

文章目录 问题创新网络主要贡献Autoencoder-like Dehazing NetworkAdaptive Mixup for Feature PreservingDynamic Feature Enhancement1. 可变形卷积的使用2. 扩展感受野3. 减少网格伪影4. 融合空间结构信息 Contrastive Regularization1. 核心思想2. 正样本对和负样本对的构建…

uni-app打包h5并部署到nginx,路由模式history

uni-app打包有些坑&#xff0c;当时运行的基础路径填写了./&#xff0c;导致在二级页面刷新之后&#xff0c;页面直接空白。就只能换一个路径了&#xff0c;nginx也要跟着改&#xff0c;下面是具体步骤。 manifest.json配置web 运行路径写/h5/&#xff0c;或者写你们网站的目…

SQLiteStudio:一款免费开源跨平台的SQLite管理工具

目录 1.简介 2.下载与安装 3.实现分析 4.总结 1.简介 SQLiteStudio 是一款专门用于管理 SQLite 数据库的图形化工具&#xff0c;由波兰开发者开发并维护。由于 SQLite 以其轻量级、零配置、嵌入式等特性被广泛应用于各种小型项目、移动应用和桌面应用中&#xff0c;而 SQLi…

Java入职篇(2)——开发流程以及专业术语

Java入职篇&#xff08;2&#xff09;——开发流程以及专业术语 开发流程 开发术语 测试用例&#xff08;用例&#xff09; 测试人员写的测试方案&#xff0c;基本上就是编写的测试过程&#xff0c;以及测试的预取结果 灰度测试 现在小部分范围内使用&#xff0c;然后逐步…

Figma介绍(基于云的协作式界面设计工具,主要用于UI/UX设计、原型制作和团队协作)

文章目录 注册和登录简单操作说明Figma介绍**核心特点**1. **云端协作与实时同步**2. **跨平台兼容**3. **高效设计工具**4. **原型交互与动效**5. **开发对接友好**6. **插件生态**7. **版本控制与历史记录** **适用场景**- **团队协作**&#xff1a;远程团队共同设计、评审、…

RAW图与BAYER图异同

RAW图是一种未经处理、未压缩的图像文件格式&#xff0c;它记录了图像传感器捕捉到的原始数据&#xff0c;包含了拍摄时的大量图像信息。下面从多个方面详细介绍RAW图&#xff1a; 参考&#xff1a;B站大清光学 定义与基本概念 定义&#xff1a;RAW文件是图像传感器将捕捉到…