如何变换鼠标样式

本文详细介绍并展示了CSS中各种鼠标指针样式的应用方法及其视觉效果。包括但不限于:默认样式、手形指针、十字准星、等待指示等,并提供了自定义鼠标样式的方法。

Eg:

<style>

.myMouse{cursor:hand}

</style>

<table>

<tr><td><img src="/URL" alt="img" class="myMouse" /></tr></td>

</table>

鼠标样式列表:

把你的光标放到相应文字上查看效果

要注意光标的实际效果依赖于用户的系统设置,与你在这里看到的效果并不一定一致。

cursor: crosshair;

点击查看图片

十字准心

The cursor render as a crosshair
游标表现为十字准线

cursor: pointer;
cursor: hand;
写两个是为了照顾IE5,它只认hand。

点击查看图片

The cursor render as a pointer (a hand) that indicates a link
游标以暗示(手指)的形式来表明有一个连接

cursor: wait;

点击查看图片

等待/沙漏

The cursor indicates that the program is busy (often a watch or an hourglass)
游标暗示当前程序正忙(一般为一块表或是一个沙漏)

cursor: help;

点击查看图片

帮助

The cursor indicates that help is available (often a question mark or a balloon)
游标暗示当前位置可得到帮助(一般为问号或是气球)

cursor: no-drop;

点击查看图片

无法释放

cursor: no-drop;

cursor: text;

点击查看图片

文字/编辑

The cursor indicates text
游标暗示当前所处位置为文字内容

cursor: move;

点击查看图片

可移动对象

The cursor indicates something that should be moved
游标暗示一些东西应该被移动

cursor: n-resize;

 

向上改变大小(North)

The cursor indicates that an edge of a box is to be moved up (north)
边缘可向上移动(北)

cursor: s-resize;

点击查看图片

向下改变大小(South)

The cursor indicates that an edge of a box is to be moved down (south)
边缘可向下方移动(南)

cursor: e-resize;

点击查看图片

向右改变大小(East)

The cursor indicates that an edge of a box is to be moved right (east)
box边缘可向右(东)边移动

cursor: w-resize;

点击查看图片

向左改变大小(West)

The cursor indicates that an edge of a box is to be moved left (west)
边缘可向左移动(西)

cursor: ne-resize;

点击查看图片

向上右改变大小(North East)

The cursor indicates that an edge of a box is to be moved up and right (north/east)
游标暗示box的边缘可向右上方移动(东北方向)

cursor: nw-resize;

点击查看图片

向上左改变大小(North West)

The cursor indicates that an edge of a box is to be moved up and left (north/west)
边缘可向左上方移动(西北)

cursor: se-resize;

点击查看图片

向下右改变大小(South East)

The cursor indicates that an edge of a box is to be moved down and right (south/east)
边缘可向右下方移动(东南)

cursor: sw-resize;

点击查看图片

向下左改变大小(South West)

The cursor indicates that an edge of a box is to be moved down and left (south/west)
边缘可向左下方移动(西南)

cursor: auto;

 

自动

The browser sets a cursor
浏览器设置一个游标

cursor:not-allowed;

点击查看图片

禁止

cursor:not-allowed;

cursor: progress;

点击查看图片

处理中

cursor: progress;

cursor: default;

点击查看图片

系统默认

The default cursor (often an arrow)
默认的游标状态(通常为一个箭头)

cursor: url(' # ');
# = 光标文件地址      (注意文件格式必须为:.cur 或 .ani)。

点击查看图片

用户自定义(可用动画)

The url of a custom cursor to be used.
自定义游标的url位置

Note: Always define a generic cursor at the end of the list in case none of the url-defined cursors can be used
注意:在定义完自定义的游标之后在末尾加上一般性的游标,以防那些url所定义的游标不能使用

<think>好的,我现在需要帮助用户解决在Qt的QGraphicsView中自定义鼠标样式的问题。用户已经提供了相关的引用内容,我需要仔细分析这些引用,并找到相关的信息来构建答案。 首先,用户的问题是关于如何在QGraphicsView中自定义鼠标样式。根据提供的引用,特别是引用[2]提到QGraphicsView支持鼠标和键盘事件,允许用户与场景中的图形项进行交互,比如选择、移动、放大缩小等。这说明鼠标事件的处理是在QGraphicsView或QGraphicsScene层面进行的,可能需要通过重写事件处理函数来改变鼠标样式。 接下来,引用[3]讨论了如何通过子类化QGraphicsItem来自定义图元,并处理事件和状态。虽然这主要针对图元本身的事件处理,但可能对整体场景中的鼠标样式有影响。例如,当鼠标悬停在某个图元上时,改变光标样式。 引用[4]提到缩放与旋转特性,这可能涉及到在视图操作时改变鼠标样式,比如在缩放时显示一个放大镜光标。这提示可以通过QGraphicsView的事件处理来实现不同操作下的光标变化。 根据这些信息,我需要整理出几种不同的方法来自定义鼠标样式: 1. **全局设置视图鼠标样式**:直接通过QGraphicsView的setCursor方法设置整个视图的光标,适用于所有情况。这在引用中没有直接提到,但属于Qt的基础知识,应该可行。 2. **场景事件处理**:在QGraphicsScene中重写事件处理函数,如mouseMoveEvent,根据鼠标位置或悬停的图元动态改变光标。引用[3]中的事件处理可能与此相关,例如当鼠标进入某个图元区域时改变光标。 3. **图元悬停事件**:在自定义的QGraphicsItem子类中处理hoverEnterEvent和hoverLeaveEvent,当鼠标悬停在图元上时改变光标。引用[3]提到的事件处理可能支持这一点,需要启用图元的悬停事件。 4. **根据交互状态动态修改**:例如在缩放或旋转操作时,通过QGraphicsView的变换操作来改变光标样式。引用[4]中的缩放与旋转部分可能涉及到这种动态变化,需要在事件处理中检测操作状态并调整光标。 接下来需要验证这些方法的可行性,并参考引用中的具体内容。例如,引用[3]中的自定义图元事件处理可以用于方法3,而方法2可能需要覆盖场景的事件处理函数。方法4可能需要结合视图的变换事件来调整光标。 然后,我需要编写示例代码来展示每种方法。例如,全局设置视图光标的代码较为简单,直接在视图对象上调用setCursor。对于场景事件处理,可能需要子类化QGraphicsScene并重写mouseMoveEvent,根据条件设置光标。图元悬停事件则需要子类化QGraphicsItem,启用悬感事件,并在相应事件中修改光标。 同时,需要注意正确使用Qt的事件处理机制,比如调用基类的事件处理函数以确保其他事件正常传递。此外,引用[2]提到的交互性支持说明这些方法是可行的,因为用户可以与场景中的图元进行交互,而光标样式是交互的一部分。 最后,总结这些方法,并生成相关问题,确保覆盖用户可能感兴趣的扩展内容,如不同应用场景下的光标设置、动态修改方法、性能影响等。</think>在Qt的`QGraphicsView`中自定义鼠标样式可以通过多种方式实现,以下是具体方法和示例: --- ### 方法1:全局设置视图鼠标样式 直接为整个视图设置统一的光标样式: ```cpp // 设置视图的默认鼠标样式(例如:十字光标) QGraphicsView* view = new QGraphicsView; view->setCursor(Qt::CrossCursor); ``` **适用场景**:所有用户交互时统一光标样式[^2]。 --- ### 方法2:通过场景事件动态修改 在`QGraphicsScene`中重写事件,根据条件修改光标: ```cpp class CustomScene : public QGraphicsScene { protected: void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override { if (/* 判断条件(如鼠标位置)*/) { this->views().first()->setCursor(Qt::OpenHandCursor); } else { this->views().first()->setCursor(Qt::ArrowCursor); } QGraphicsScene::mouseMoveEvent(event); // 保持事件传递 } }; ``` **特点**:支持根据鼠标位置动态切换样式[^3]。 --- ### 方法3:在图元悬停时修改光标 在自定义图元中捕获悬停事件: ```cpp class CustomItem : public QGraphicsItem { public: CustomItem() { setAcceptHoverEvents(true); // 启用悬停事件 } void hoverEnterEvent(QGraphicsSceneHoverEvent*) override { setCursor(Qt::PointingHandCursor); // 悬停时变为手指光标 } void hoverLeaveEvent(QGraphicsSceneHoverEvent*) override { unsetCursor(); // 恢复默认光标 } // 必须实现 boundingRect() 和 paint() QRectF boundingRect() const override { /* ... */ } void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override { /* ... */ } }; ``` **作用**:当鼠标悬停在此类图元上时触发特定光标[^3]。 --- ### 方法4:结合交互状态动态修改 在视图操作(如缩放)时更新光标: ```cpp class CustomView : public QGraphicsView { protected: void wheelEvent(QWheelEvent* event) override { if (event->modifiers() & Qt::ControlModifier) { setCursor(Qt::SizeVerCursor); // 按住Ctrl时显示垂直缩放光标 // 执行缩放操作 } else { setCursor(Qt::ArrowCursor); } } }; ``` **应用场景**:在特定交互模式(如拖拽、缩放)下改变光标[^4]。 --- ### 注意事项 1. **事件传递**:重写事件时需调用基类方法(如`QGraphicsScene::mouseMoveEvent(event)`),避免破坏原有逻辑[^3]。 2. **性能优化**:频繁修改光标可能导致轻微延迟,建议在必要时更新。 3. **样式恢复**:使用`unsetCursor()`恢复默认光标,避免状态残留。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值