QCursor class
QCursor类提供具有任意形状的鼠标光标。
Header | #include < QCursor > |
---|---|
qmake | QT += gui |
Inherits | |
Inherited By | |
Since |
详细说明
此类主要用于创建与特定小部件关联的鼠标光标,以及获取和设置鼠标光标的位置。
Qt有许多标准的光标形状,但是您也可以基于QBitmap、掩码和热点来定制光标形状。
要将光标与小部件关联,请使用QWidget::setCursor() 。要与所有小部件相关联(通常是短时间的),请使用QGuiApplication::setOverrideCursor() 。
要设置光标形状,请使用QCursor::setShape() 或使用以形状为参数的QCursor构造函数,也可以使用Qt::CursorShape枚举中定义的预定义光标之一。
如果要使用自己的位图创建光标,请使用QCursor构造函数(获取位图和掩码)或构造函数(获取pixmap作为参数)。
要设置或获取鼠标光标的位置,请使用静态方法QCursor::pos() 和QCursor::setPos() 。
注意:可以在QGuiApplication之前创建QCursor,但是除了作为在QGuiApplication之后创建的真正QCursor的占位符之外,它没有任何用处。在QGuiApplication 之前使用创建的QCursor将导致崩溃。
X11用户须知
在X11上,Qt支持Xcursor库,它支持全色图标主题。下表显示了用于每个Qt::CursorShape值的游标名称。如果使用下面显示的名称找不到游标,则将使用标准X11游标。注意:X11没有为所有可能的Qt::CursorShape值提供适当的游标。一些游标可能来自Xcursor主题,而其他游标则使用内部位图游标。
Shape | Qt::CursorShape | Cursor Name | Shape | Qt::CursorShape | Cursor Name |
---|---|---|---|---|---|
Qt::ArrowCursor | left_ptr | Qt::SizeVerCursor | size_ver | ||
Qt::UpArrowCursor | up_arrow | Qt::SizeHorCursor | size_hor | ||
Qt::CrossCursor | cross | Qt::SizeBDiagCursor | size_bdiag | ||
Qt::IBeamCursor | ibeam | Qt::SizeFDiagCursor | size_fdiag | ||
Qt::WaitCursor | wait | Qt::SizeAllCursor | size_all | ||
Qt::BusyCursor | left_ptr_watch | Qt::SplitVCursor | split_v | ||
Qt::ForbiddenCursor | forbidden | Qt::SplitHCursor | split_h | ||
Qt::PointingHandCursor | pointing_hand | Qt::OpenHandCursor | openhand | ||
Qt::WhatsThisCursor | whats_this | Qt::ClosedHandCursor | closedhand | ||
Qt::DragMoveCursor | dnd-move or move | Qt::DragCopyCursor | dnd-copy or copy | ||
Qt::DragLinkCursor | dnd-link or link |
公共函数
构造和析构
- QCursor(QCursor &&other)
- QCursor(const QCursor &c)
- QCursor(const QPixmap &pixmap, int hotX = -1, int hotY = -1)
- QCursor(const QBitmap &bitmap, const QBitmap &mask, int hotX = -1, int hotY = -1)
- QCursor(Qt::CursorShape shape)
- QCursor()
- QCursor & operator=(QCursor &&other)
- QCursor & operator=(const QCursor &c)
- ~QCursor()
相关函数
-
QBitmap bitmap(Qt::ReturnByValueConstant) const 返回光标位图,如果是标准光标之一,则返回空位图
以前,Qt提供了bitmap() 的一个版本,它通过指针返回位图。该版本现在已被弃用。要保持与旧代码的兼容性,可以显式区分by pointer函数和by value函数:
const QBitmap *bmpPtr = cursor->bitmap(); QBitmap bmpVal = cursor->bitmap(Qt::ReturnByValue);
如果你使用 QT_DISABLE_DEPRECATED_BEFORE 宏禁用弃用版本,那么你可以省略Qt::ReturnByValue,如下所示:
QBitmap bmpVal = cursor->bitmap();
-
QPoint hotSpot() const 返回游标热点,如果是标准游标,则返回(0,0)。
-
QBitmap mask(Qt::ReturnByValueConstant) const 返回游标位图掩码,如果是标准游标,则返回空位图。
以前,Qt提供了一个版本的mask(),它通过指针返回位图。该版本现在已弃用。为了保持与旧代码的兼容性,你可以显式地区分逐指针函数和逐值函数:const QBitmap *bmpPtr = cursor->mask(); QBitmap bmpVal = cursor->mask(Qt::ReturnByValue);
如果你使用QT_DISABLE_DEPRECATED_BEFORE宏禁用弃用版本,那么你可以省略Qt::ReturnByValue,如下所示:
QBitmap bmpVal = cursor->mask();
-
QPixmap pixmap() const 返回光标像素映射
只有当游标是像素映射游标时,这个选项才有效。
-
Qt::CursorShape shape() const
void setShape(Qt::CursorShape shape)enum Qt::CursorShape 此enum类型定义了可以使用的各种游标。
标准箭头光标是小部件正常状态下的默认光标。Constant Value Description Qt::ArrowCursor 0 标准箭头光标。 Qt::UpArrowCursor 1 指向屏幕顶部的箭头。 Qt::CrossCursor 2 一种十字光标,通常用来帮助用户在屏幕上准确地选择一个点。 Qt::WaitCursor 3 一个沙漏或指针,通常在用户与应用程序交互时显示。 Qt::IBeamCursor 4 一个插入符号或ibeam光标,指示可以接受和显示文本输入。 Qt::SizeVerCursor 5 用于垂直调整顶级窗口大小的元素的游标。 Qt::SizeHorCursor 6 用于水平调整顶级窗口大小的元素的游标。 Qt::SizeBDiagCursor 7 在顶层窗口的右上角和左下角对角调整大小。 Qt::SizeFDiagCursor 8 在顶层窗口的左上角和右下角对角调整其大小。 Qt::SizeAllCursor 9 在任何方向上调整顶级窗口的大小。 Qt::BlankCursor 10 空白/不可见的光标,通常在需要隐藏光标形状时使用。 Qt::SplitVCursor 11 垂直分割器的光标,指示可以水平拖动手柄来调整可用空间的使用。 Qt::SplitHCursor 12 水平分割器的光标,指示可以垂直拖动手柄以调整可用空间的使用。 Qt::PointingHandCursor 13 一种指针,通常用于超链接等可点击元素。 Qt::ForbiddenCursor 14 划圆光标,通常在拖放操作期间使用,指示拖放的内容不能放在特定的小部件上或某些区域内。 Qt::WhatsThisCursor 15 一个带问号的箭头,通常用来表示这是什么?小部件的帮助。 Qt::BusyCursor 16 一个沙漏或手表光标,通常显示在操作过程中,允许用户与应用程序交互,而他们在后台执行。 Qt::OpenHandCursor 17 代表一只张开的手的光标,通常用来表示光标下面的区域是画布的可见部分,用户可以单击和拖动以滚动。 Qt::ClosedHandCursor 18 一种表示握着的手的游标,通常用来表示正在进行涉及滚动的拖动操作。 Qt::DragCopyCursor 19 一种光标,通常用于拖动一个项目以复制它。 Qt::DragMoveCursor 20 一种光标,通常用于拖动一个项目。 Qt::DragLinkCursor 21 一种光标,通常用于拖动一个项目以建立到它的链接。 Qt::BitmapCursor 24 -
void swap(QCursor &other)
-
QVariant operator QVariant() const
静态公用函数
-
QPoint pos() 返回主屏幕的光标(热点)在全局屏幕坐标中的位置
可以调用QWidget::mapFromGlobal() 将其转换为widget坐标。
注:该位置从窗口系统查询。如果鼠标事件是通过其他方式生成的(例如,通过单元测试中的QWindowSystemInterface),那么这些假鼠标移动将不会反映在返回值中。
注意:在没有窗口系统或光标不可用的平台上,返回的位置基于通过QWindowsSystemInterface生成的鼠标移动事件。
-
QPoint pos(const QScreen *screen)
-
void setPos(int x, int y)
-
void setPos(QScreen *screen, int x, int y) 将屏幕的光标(热点)移动到全局屏幕位置(x,y)
您可以调用QWidget::mapToGlobal() 将小部件坐标转换为全局屏幕坐标。
注意:调用此函数会导致通过窗口系统更改光标位置。窗口系统通常会通过向应用程序的窗口发送鼠标事件来响应。这意味着在单元测试中以及通过QWindowSystemInterface注入假鼠标事件的任何地方都应该避免使用此函数,因为窗口系统的鼠标状态(例如关于按钮)可能与应用程序生成的事件中的状态不匹配。
注意:在没有窗口系统或光标不可用的平台上,此功能可能不起任何作用。
-
void setPos(const QPoint &p)
-
void setPos(QScreen *screen, const QPoint &p)
相关的函数
- bool operator!=(const QCursor &lhs, const QCursor &rhs)
- bool operator==(const QCursor &lhs, const QCursor &rhs)
- QDataStream & operator<<(QDataStream &stream, const QCursor &cursor)
- QDataStream & operator>>(QDataStream &stream, QCursor &cursor)
演示代码
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QRect scr = app.screens ().first ()->geometry ();
qDebug() << scr;
QTimer timer;
int i = 0;
double count = 100;
double wd = scr.width () / count;
double ht = scr.height () / count;
qDebug() << wd << ht;
QCursor::setPos (0,0);
QObject::connect (&timer,&QTimer::timeout ,[&]{
QCursor::setPos ( wd*i, ht*i );
if(i++ > count) {
timer.stop ();
app.quit ();
}
});
timer.start (30);
app.exec();
return 0;
}