详解Qt之 QCursor 鼠标指针

news2024/9/9 6:27:04

文章目录

  • 前言
    • QCursor
      • 概念
      • 作用
      • 为什么需要 QCursor
      • QCursor 的主要函数和成员
        • 函数列表
      • 示例代码
        • 示例 1:改变光标形状
        • 示例 2:自定义光标
        • 示例 3:获取和设置光标位置
  • 总结


前言

在图形用户界面(GUI)应用程序中,鼠标指针(光标)是用户与应用程序交互的重要工具。Qt 提供了 QCursor 类来管理和控制鼠标指针的外观和行为。本文将详细介绍 QCursor 的概念、作用及其主要函数,并提供三个示例代码来帮助理解其使用方法。


QCursor

概念

QCursor 是 Qt 中用于表示和操作鼠标指针的类。它可以设置和获取鼠标指针的形状、位置,以及管理自定义光标图像。通过使用 QCursor,开发者可以灵活地改变应用程序中的鼠标指针,以提升用户体验。

作用

QCursor 的主要作用包括:

  1. 改变光标形状:可以设置各种预定义的光标形状,例如箭头、等待光标、十字光标等。
  2. 设置自定义光标:支持使用自定义图像作为光标。
  3. 获取和设置光标位置:可以获取和设置光标在屏幕上的位置。

为什么需要 QCursor

在一些交互性较强的应用程序中,不同的操作和状态可能需要不同的光标形状来提示用户。例如,在绘图软件中,当用户选择不同的工具时,光标形状会相应改变。QCursor 提供了一种简单且高效的方式来实现这一点,从而增强用户体验。

QCursor 的主要函数和成员

函数列表
  • QCursor()

    作用:构造一个默认的 QCursor 对象。

    参数:无。

    返回值:无。

  • QCursor(Qt::CursorShape shape)

    作用:构造一个指定形状的 QCursor 对象。

    参数

    • shape:光标的形状(例如 Qt::ArrowCursorQt::WaitCursor 等)。
      更多:
ConstantValueDescription描述
Qt::ArrowCursor0标准箭头光标。
Qt::UpArrowCursor1指向屏幕顶部的向上箭头光标。
Qt::CrossCursor2十字光标,通常用于帮助用户精确选择屏幕上的一个点。
Qt::WaitCursor3沙漏或手表光标,通常在操作期间显示,这些操作会阻止用户与应用程序交互。
Qt::IBeamCursor4插入符号或文本光标,表示小部件可以接受和显示文本输入。
Qt::SizeVerCursor5用于垂直调整顶级窗口大小的光标。
Qt::SizeHorCursor6用于水平调整顶级窗口大小的光标。
Qt::SizeBDiagCursor7用于在右上角和左下角对顶级窗口进行对角线调整大小的光标。
Qt::SizeFDiagCursor8用于在左上角和右下角对顶级窗口进行对角线调整大小的光标。
Qt::SizeAllCursor9用于在任意方向调整顶级窗口大小的光标。
Qt::BlankCursor10空白/不可见光标,通常在需要隐藏光标形状时使用。
Qt::SplitVCursor11用于垂直分隔器的光标,表示可以水平拖动手柄以调整可用空间的使用。
Qt::SplitHCursor12用于水平分隔器的光标,表示可以垂直拖动手柄以调整可用空间的使用。
Qt::PointingHandCursor13指示手光标,通常用于可点击元素,如超链接。
Qt::ForbiddenCursor14禁止光标,通常在拖放操作期间显示,以指示拖动的内容不能放置在特定小部件或区域内。
Qt::OpenHandCursor17表示打开的手光标,通常用于表示光标下的区域是画布的可见部分,用户可以点击并拖动以滚动查看。
Qt::ClosedHandCursor18表示关闭的手光标,通常用于指示正在进行的涉及滚动的拖动操作。
Qt::WhatsThisCursor15带问号的箭头光标,通常用于指示小部件存在“这是什么?”帮助。
Qt::BusyCursor16沙漏或手表光标,通常在后台操作期间显示,这些操作允许用户与应用程序交互。
Qt::DragMoveCursor20通常在拖动项目时使用的光标。
Qt::DragCopyCursor19通常在拖动项目以复制时使用的光标。
Qt::DragLinkCursor21通常在拖动项目以创建链接时使用的光标。
Qt::BitmapCursor24位图光标。

返回值:无。

  • QCursor(const QBitmap &bitmap, const QBitmap &mask, int hotX = -1, int hotY = -1)

    作用:使用指定的位图和掩码构造一个自定义 QCursor 对象。

    参数

    • bitmap:光标的位图。
    • mask:光标的掩码。
    • hotX:光标热点的 X 坐标(默认为 -1)。
    • hotY:光标热点的 Y 坐标(默认为 -1)。

    返回值:无。

  • Qt::CursorShape shape() const

    作用:返回 QCursor 的当前形状。

    参数:无。

    返回值:光标的形状。

  • void setShape(Qt::CursorShape shape)

    作用:设置 QCursor 的形状。

    参数

    • shape:新的光标形状。

    返回值:无。

  • QPoint pos() const

    作用:返回当前光标的位置。

    参数:无。

    返回值:光标的位置。

  • void setPos(int x, int y)

    作用:设置光标的位置。

    参数

    • x:光标的 X 坐标。
    • y:光标的 Y 坐标。

    返回值:无。

示例代码

示例 1:改变光标形状

以下示例展示了如何改变窗口中的光标形状:

#include <QApplication>
#include <QWidget>
#include <QCursor>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget window;
    window.setCursor(Qt::CrossCursor); // 设置光标为十字形
    window.resize(400, 300);
    window.show();

    return app.exec();
}
示例 2:自定义光标

以下示例展示了如何使用自定义图像设置光标:

#include <QApplication>
#include <QWidget>
#include <QCursor>
#include <QBitmap>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QBitmap bitmap(":/images/cursor_bitmap.png"); // 自定义光标的位图
    QBitmap mask(":/images/cursor_mask.png");     // 自定义光标的掩码
    QCursor customCursor(bitmap, mask, 0, 0);     // 创建自定义光标

    QWidget window;
    window.setCursor(customCursor); // 设置自定义光标
    window.resize(400, 300);
    window.show();

    return app.exec();
}
示例 3:获取和设置光标位置

以下示例展示了如何获取和设置光标的位置:

#include <QApplication>
#include <QWidget>
#include <QCursor>
#include <QTimer>
#include <QDebug>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget window;
    window.resize(400, 300);
    window.show();

    // 定时器每秒获取和设置光标位置
    QTimer timer;
    QObject::connect(&timer, &QTimer::timeout, [&]() {
        QPoint pos = QCursor::pos(); // 获取光标位置
        qDebug() << "Current cursor position:" << pos;

        // 将光标位置设置到窗口中心
        QPoint center = window.rect().center();
        QCursor::setPos(window.mapToGlobal(center));
    });
    timer.start(1000); // 每秒触发一次

    return app.exec();
}

总结

QCursor 是 Qt 提供的一个强大且灵活的类,用于管理和控制鼠标指针的外观和行为。通过使用 QCursor,开发者可以轻松地改变光标形状、设置自定义光标以及获取和设置光标位置。在交互性较强的应用程序中,合理地使用 QCursor 可以显著提升用户体验。希望通过本文和示例代码,读者能够更好地理解和掌握 QCursor 的使用方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APP逆向 day24unidbg上

一.前言 今天开始讲app逆向最后一个也是最重要的unidbg&#xff0c;这已经是从初级进阶到中级的了&#xff0c;我会讲unidbg&#xff0c;讲三节课&#xff0c;分为上中下来和大家讲&#xff08;由简单到难逐步&#xff09;&#xff0c;这节课主要是和大家讲unidbg的介绍并且会…

详解工厂模式与抽象工厂模式有什么区别?【图解+代码】

目录 工厂模式&#xff0c;抽象工厂模式是什么&#xff1f; 两种设计模式的流程&#xff1a; 1、工厂模式 2、抽象工厂模式 两种模式的对比 共同点&#xff1a; 不同点&#xff1a; 总结 工厂模式&#xff0c;抽象工厂模式是什么&#xff1f; 我已经具体的写了这两种模…

我的「Java全栈高级架构师高薪就业课」适合什么样的人群学习?

我的《Java全栈高级架构师高薪就业课》上线了~ 这是一套Java全栈微服务架构、以实战项目驱动的课程&#xff01;包含34个模块&#xff0c;1514课时。对标阿里P7级别技术栈而研发&#xff0c;有着循序渐进的学习体系&#xff0c;助你开启Java进阶之旅。 我的这套《Java全栈高级…

海域感知与岸线监控实施方案:总体技术架构

文章目录 引言I 总体架构1.1 物理结构图1.2 功能逻辑结构图1.3 系统架构1.4 雷达光电船只检测系统拓扑图1.5 雷达光电船只联动跟踪效果图II 技术架构存储Geoserver视频see also引言 利用渔船现有的定位导航通讯设备等资源,实现岸线和近岸海域内违法船舶和可疑船舶预警、抓拍、…

系统学习渗透测试:从零到精通的全面指南

渗透测试&#xff0c;作为网络安全领域的一项重要技术&#xff0c;旨在通过模拟黑客攻击来评估计算机系统的安全性。对于想要系统学习渗透测试的人来说&#xff0c;这既是一条充满挑战的道路&#xff0c;也是一次深入了解网络安全的宝贵机会。本文将从基础知识、技能提升、实战…

怎麼使用ixbrowser指紋流覽器?

ixBrowser是一款指紋流覽器流覽器&#xff0c;利用指紋隔離技術確保在與Pixelscan等第三方檢測網站進行測試時具有出色的通過率&#xff0c;能夠輕鬆管理多個獨立帳戶。此外&#xff0c;ixBrowser能夠創建無限的獨立個人資料並邀請團隊成員。簡化了運營&#xff0c;降低了運營成…

转行要趁早!网络安全岗人才稀缺,前景广阔,收藏这一篇就够了

1 网络安全从业人员能力基本要求&#xff0c;您达标了吗&#xff1f; 引导 根据国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告&#xff08;2023年第1号&#xff09;&#xff0c;由全国信息安全标准化技术委员会归口的《信息安全技术 网络安全从业…

设计模式15-门面模式

设计模式15-门面模式 "接口隔离"模式典型模式1. 适配器模式&#xff08;Adapter Pattern&#xff09;2. 装饰模式&#xff08;Decorator Pattern&#xff09;3. 桥接模式&#xff08;Bridge Pattern&#xff09;4. 代理模式&#xff08;Proxy Pattern&#xff09;5. …

分布式日志分析系统--ELK

文章目录 ELK概述ELK主要特点ELK应用架构 Elasticsearch原理JSON格式倒排索引 ES与关系型数据库ES相关概念ES安装说明1.环境初始化2.优化系统资源限制配置3.编辑ES服务文件elasticsearch. yml 优化ELK集群安装脚本scp的使用集群安装成功 Shell命令API使用创建索引创建Type创建分…

yocto系列讲解[实战篇]95 - 使用外部第三方交叉编译器toolchain

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 概述下载toolchain包部署toolchain下载yocto下载toolchain layer添加toolchain layer配置toolchain变量编译和测试验证返回总目录:Yo…

中控屏UI设计全解析:布局与交互技巧

在现代科技的浪潮中&#xff0c;中控屏已成为智能系统不可或缺的交互界面。无论是智能家居、车载系统还是工业控制&#xff0c;一个直观、易用且美观的中控屏 UI 设计对于提升用户体验至关重要。本教程将带领你深入探索中控屏UI设计的精髓&#xff0c;指导你如何打造出既专业又…

一些Kafka面试题

Kafka是如何保证消息不丢失&#xff1f; 1.生产者发送消息到Broker丢失&#xff1a; 设置异步发送&#xff1a;发送失败则使用回调进行记录或者重发 消息重试&#xff1a;参数配置&#xff0c;可以设置重试次数 2.消息在broker中存储丢失 发送确认机制acks acks0&#xf…

创新突破 | OpenCSG发布StarShip CodeReview v1.0.0 Beta版

1. 代码审查很关键但耗时耗力 在软件开发过程中&#xff0c;代码审查是确保代码质量的关键环节。代码审查有助于维护代码标准和发现潜在错误&#xff0c;但也常常耗费大量时间和精力。审查者不仅需要深入理解代码逻辑&#xff0c;还要在繁复的逻辑中识别Bug&#xff0c;这个过…

如何使用 Odoo 16 主生产调度程序规划生产

为了优化运营并提高生产力&#xff0c;企业需要生产管理软件。在当今竞争激烈的经济环境中&#xff0c;有效的资源管理对企业至关重要。为制造业务设计的软件经常用于控制收入增长和盈利能力。ERP&#xff08;企业资源规划&#xff09;系统是专门为制造业创建的&#xff0c;可以…

Java刷题: 丑数判断

题目 丑数 就是只包含质因数 2、3 和 5 的正整数。 给你一个整数 n &#xff0c;请你判断 n 是否为 丑数 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 解题思路 我觉得刷题是为了扩宽思考的广度。看到这题的时候&#xff0c;我的大脑是发懵的…

技术成神之路:设计模式(十)备忘录模式

介绍 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为设计模式&#xff0c;它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。通过备忘录模式&#xff0c;可以在程序运行过程中保存和恢复对象的某个状态&#xff0c;从而实现“撤销”等功能。 1.定义 备忘…

11 优化器

目录 1. 随机梯度下降系优化器&#xff1a;SGD 1.1 算法种类 1.2 优缺点 2 SGDM 即为SGD with momentum 动量 2.1 公式 2.2 动量的优缺点 优点 缺点 2.3 使用场景 3 AdaGrad 3.1 公式 3.2 AdaGrad的优缺点 优点 缺点 3.3 使用场景 3.4 Adam 3.4.1 Adam优化器的…

倒计时:60秒后再输入验证码

思路1&#xff1a;每隔 1 秒种减 1 &#xff0c;直到减到 0 为止。可以写成公用方法。亲测有效。 countDown(){ const TIME_COUNT 60; if (!this.timer) { this.count TIME_COUNT; this.codeShow false; this.timer setInterval(() > { if (this.count > 0 &&…

苹果密码解锁工具已注册专业版_不限制电脑

Aiseesoft iPhone Unlocker&#xff1a;轻松解锁iPhone。功能强大&#xff1a;一键移除4位、6位密码、Touch ID和Face ID。隐私保护&#xff1a;创建密码&#xff0c;安全无忧。数据提醒&#xff1a;解锁时&#xff0c;注意数据和设置将被清除。Apple ID 解锁&#xff1a;快速删…

【Spring Boot教程:从入门到精通】掌握Spring Boot开发技巧与窍门(三)-配置git环境和项目创建

主要介绍了如何创建一个Springboot项目以及运行Springboot项目访问内部的html页面&#xff01;&#xff01;&#xff01; 文章目录 前言 配置git环境 创建项目 ​编辑 在SpringBoot中解决跨域问题 配置Vue 安装Nodejs 安装vue/cli 启动vue自带的图形化项目管理界面 总结 前言 …