Изменение внешнего вида указателя мыши

Для изменения внешнего вида указателя мыши при вхождении указателя в область компонента предназначены следующие методы из класса QWidget:

  • setCursor() — задает внешний вид указателя мыши для компонента. Прототип метода:
void setCursor(const QCursor &)

В качестве параметра указывается экземпляр класса QCursor. Конструктору класса можно передать следующие константы: Qt::ArrowCursor (стандартная стрелка), Qt::UpArrowCursor (стрелка, направленная вверх), Qt::CrossCursor (крестообразный указатель), Qt::WaitCursor (курсор выполнения операции, например, песочные часы), Qt::IBeamCursor (I-образный указатель), Qt::SizeVerCursor (стрелки, направленные вверх и вниз), Qt::SizeHorCursor (стрелки, направленные влево и вправо), Qt::SizeBDiagCursor, Qt::SizeFDiagCursor, Qt::SizeAllCursor (стрелки, направленные вверх, вниз, влево и вправо), Qt::BlankCursor (пустой указатель), Qt::SplitVCursor, Qt::SplitHCursor, Qt::PointingHandCursor (указатель в виде руки), Qt::ForbiddenCursor (перечеркнутый круг), Qt::OpenHandCursor (разжатая рука), Qt::ClosedHandCursor (сжатая рука), Qt::WhatsThisCursor (стрелка с вопросительным знаком), Qt::BusyCursor (стрелка с песочными часами или бесконечно вращающимся кругом), Qt::DragMoveCursor, Qt::DragCopyCursor и Qt::DragLinkCursor. Пример:

setCursor(QCursor(Qt::WaitCursor));
  • unsetCursor() — отменяет установку указателя для компонента. В результате внешний вид указателя мыши будет наследоваться от родительского компонента. Прототип метода:
void unsetCursor()
  • cursor() — возвращает экземпляр класса QCursor с текущим курсором. Прототип метода:
QCursor cursor() const

Управлять текущим видом курсора для всего приложения сразу можно с помощью следующих статических методов из класса QApplication:

  • setOverrideCursor() — задает внешний вид указателя мыши для всего приложения. Прототип метода:
static void setOverrideCursor(const QCursor &cursor)

В качестве параметра указывается экземпляр класса QCursor. Для отмены установки необходимо вызвать метод restoreOverrideCursor();

  • restoreOverrideCursor() — отменяет изменение внешнего вида курсора для всего приложения. Прототип метода:
static void restoreOverrideCursor()

Пример:

QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
// Выполняем длительную операцию
QApplication::restoreOverrideCursor();
  • changeOverrideCursor() — изменяет внешний вид указателя мыши для всего приложения. Если до вызова этого метода не вызывался метод setOverrideCursor(), то указанное значение игнорируется. В качестве параметра указывается экземпляр класса QCursor; Прототип метода:
static void changeOverrideCursor(const QCursor &cursor)
  • overrideCursor() — возвращает указатель на экземпляр класса QCursor с текущим курсором или нулевой указатель. Прототип метода:
static QCursor *overrideCursor()

Изменять внешний вид указателя мыши для всего приложения принято на небольшой промежуток времени, обычно на время выполнения какой-либо операции, в процессе которой приложение не может нормально реагировать на действия пользователя. Чтобы информировать об этом пользователя указатель принято выводить в виде песочных часов или бесконечно вращающегося круга (константа Qt::WaitCursor).

Метод setOverrideCursor() может быть вызван несколько раз. В этом случае курсоры помещаются в стек. Каждый вызов метода restoreOverrideCursor() удаляет последний курсор, добавленный в стек. Для нормальной работы приложения необходимо вызывать методы setOverrideCursor() и restoreOverrideCursor() одинаковое количество раз.

Класс QCursor позволяет создать объект курсора с изображением любой формы. Прототипы конструкторов:

QCursor()
QCursor(Qt::CursorShape shape)
QCursor(const QPixmap &pixmap, int hotX = -1, int hotY = -1)
QCursor(const QBitmap &bitmap, const QBitmap &mask, int hotX = -1,
        int hotY = -1)
QCursor(const QCursor &c)
QCursor(QCursor &&other)

Чтобы загрузить изображение следует передать путь к файлу конструктору класса QPixmap. Чтобы создать объект курсора необходимо передать конструктору класса QCursor в первом параметре экземпляр класса QPixmap, а во втором и третьем параметрах — координаты "горячей" точки. Пример создания и установки пользовательского курсора:

QPixmap pix("C:\\cpp\\projectsQt\\Test\\cursor.png");
setCursor(QCursor(pix, 0, 0));

Класс QCursor содержит также два статических метода:

  • pos() — возвращает экземпляр класса QPoint с координатами указателя мыши относительно экрана. Прототипы метода:
static QPoint pos()
static QPoint pos(const QScreen *screen)

Пример:

qDebug() << QCursor::pos(); // QPoint(1024,520)
  • setPos() — позволяет задать позицию указателя мыши. Прототипы метода:
static void setPos(int x, int y)
static void setPos(const QPoint &p)
static void setPos(QScreen *screen, int x, int y)
static void setPos(QScreen *screen, const QPoint &p)

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов