Qt 获取鼠标所在点颜色的RGB值,考虑多屏幕情况

ops/2025/2/8 8:33:41/

窗体类ColorPickerWidget ,继承QWidget
创建一个定时器,每隔一段时间获取鼠标所在点的颜色

QTimer *timerRGB = new QTimer(this);
connect(timerRGB, &QTimer::timeout, this, &ColorPickerWidget ::on_showRGB);
timerRGB->start(100);
void ColorPickerWidget ::on_showRGB()
{//获取鼠标位置QPoint mousePos = QCursor::pos();//获取鼠标所在屏幕QScreen *screen = QGuiApplication::screenAt(mousePos);if (!screen)return;//获取鼠标位置的颜色QPixmap pixmap = screen->grabWindow(0);QColor color = pixmap.toImage().pixelColor(mousePos - screen->geometry().topLeft());QString rgbString = QString("R:%1,G:%2,B:%3").arg(color.red()).arg(color.green()).arg(color.blue());
}
  • QCursor::pos():获取全局的鼠标位置,它返回的是屏幕坐标系中的位置,因此在多屏幕情况下,它将返回屏幕的绝对位置,而不是当前屏幕的局部坐标。
  • QGuiApplication::screenAt(mousePos):根据鼠标的全局位置来获取鼠标所在的屏幕。它会返回一个 QScreen 对象,表示包含该坐标的屏幕。
  • screen->grabWindow(0):从 QScreen 对象抓取屏幕的整个内容(包括桌面区域)。
  • pixmap.toImage().pixelColor():获取鼠标位置的颜色。
  • mousePos - screen->geometry().topLeft():由于 QPixmap::grabWindow() 捕获的是屏幕截图,并且包含了屏幕的起始坐标,因此我们需要将鼠标坐标转换为相对于当前屏幕的局部坐标来获取正确的位置。

http://www.ppmy.cn/ops/156683.html

相关文章

Conmi的正确答案——Rider中添加icon作为exe的图标

C#版本&#xff1a;.net 8.0 Rider版本&#xff1a;#RD-243.22562.250&#xff08;非商业使用版&#xff09; 1、添加图标到解决方案下&#xff1a; 2、打开“App.xaml”配置文件&#xff0c;添加配置&#xff1a; <Applicationx:Class"ComTransmit.App"xmlns&q…

多数据源配置及使用,在同一个方法下切换数据源。

切换数据源方法&#xff1a; 1. 通过注解切换数据源&#xff0c;可以在方法上使用也可以在类上使用&#xff0c;遵循就近原则 DS(“数据源名”) 注意&#xff1a;在同一个方法使用多个数据源不要使用Transactional&#xff0c;会导致报错。 2. 方法中手动切换 切换数据源类…

python编程-集合内置函数和filter(),集合常见操作

在Python中&#xff0c;列表、集合、字典是三种常用的数据结构&#xff0c;它们各自拥有一些内置函数&#xff0c;用于执行各种操作。 一、列表的常用内置函数 #‌1、append(obj)‌: 在列表末尾添加新的对象。list_a [1, 2, 3] list_a.append(4) print(list_a) # 输出: [1,…

群晖NAS如何通过WebDAV和内网穿透实现Joplin笔记远程同步

文章目录 前言1. 检查群晖Webdav 服务2. 本地局域网IP同步测试3. 群晖安装Cpolar工具4. 创建Webdav公网地址5. Joplin连接WebDav6. 固定Webdav公网地址7. 公网环境连接测试 前言 在数字化浪潮的推动下&#xff0c;笔记应用已成为我们记录生活、整理思绪的重要工具。Joplin&…

Boost:通过boost::process::child完成带管道的调用

管道是经常使用的,比如: $ cat file.txt this is data 1 this is date 1 this is data 2 this is date 2$ cat file.txt | grep data this is data 1 this is data 2那么通过C++怎么实现这种管道调用呢,实际上boost有提供方法: #include <boost/process.hpp> #inc…

【GitHub】相关工具下载及使用

目录 背景GitHub的使用Git工具下载及安装 背景 需要在GitHub查阅相关资料&#xff0c;以下是对使用GitHub做相关记录。 GitHub的使用 参考链接: GitHub入门指南&#xff1a;一步一步教你使用GitHub Git工具下载及安装 参考链接: windows安装git&#xff08;全网最详细&…

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter5-基本引用类型

五、基本引用类型 引用值&#xff08;或者对象&#xff09;是某个特定引用类型的实例。 在 ECMAScript 中&#xff0c;引用类型是把数据和功能组织到一起的结构&#xff0c;经常被人错误地称作“类”。虽然从技术上讲 JavaScript 是一门面向对象语言&#xff0c;但 ECMAScript …

Golang 并发机制-7:sync.Once实战应用指南

Go的并发模型是其突出的特性之一&#xff0c;但强大的功能也带来了巨大的责任。sync.Once是由Go的sync包提供的同步原语。它的目的是确保一段代码只执行一次&#xff0c;而不管有多少协程试图执行它。这听起来可能很简单&#xff0c;但它改变了并发环境中管理一次性操作的规则。…