Evgenii Legotckoi
Evgenii Legotckoi27 сентября 2015 г. 21:11

Qt/C++ - Урок 022. Как изменить курсор мыши в Qt

Задача "Кастомизировать курсор в программе" встаёт перед программистом тогда, когда этого требует дизайн программы, или идёт разработка игрового ПО, и это становится уже вопросом дизайна и атмосферы игры.

Кастомизация курсора в Qt является тривиальной задачей, в которую входит лишь установка собственного курсора для каждого визуального объекта, который присутствует в игре или программе. При наведении на этот объект, курсор изменяет свой внешний вид в соответствии с тем изображением, которое было установлено в объект в качестве курсора .

В проекте Qt по умолчанию, окно в котором унаследовано от QWidget даже нет необходимости подключать дополнительных заголовочных файлов. Всё, что нужно сделать - это создать объект класса QCursor с помощью QPixmap из ресурсного файла.

В качестве ресурсных файлов необходимо создать изображения курсоров с расширением PNG и размерами 32х32 пикселей. Этот размер является рекомендованным в документации по Qt, поскольку он является повсеместно поддерживаемым.

В данном примере используется три изображения курсоров:

  • cursorTarget.png - данный курсор будет использоваться в области QGraphicsView;
  • cursorArrowRed.png - данный курсор будет использоваться в области окна в целом;
  • cursorArrowGreen.png - данный курсор будет использоваться в области кнопки.

Курсоры:


Изменяем курсор

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // Создаём курсор цели из ресурсного файла
    QCursor cursorTarget = QCursor(QPixmap(":/cursor/cursorTarget.png"));
    ui->graphicsView->setCursor(cursorTarget); // Устанавливаем курсок цели

    /* Создаём курсор (Красная стрелка) и
     * сдвигаем горячую точку курсора на позици x = 0 y = 0
     * */
    QCursor cursorRed = QCursor(QPixmap(":/cursor/cursorArrowRed.png"), 0, 0);
    this->setCursor(cursorRed); // Устанавливаем курсор

    /* Создаём курсор (Зеленая стрелка) и
     * сдвигаем горячую точку курсора на позици x = 0 y = 0
     * */
    QCursor cursorGreen = QCursor(QPixmap(":/cursor/cursorArrowGreen.png"),0,0);
    ui->pushButton->setCursor(cursorGreen);     // Устанавливаем курсор
    ui->pushButton_2->setCursor(cursorGreen);   // Устанавливаем курсор
}

Widget::~Widget()
{
    delete ui;
}

Демонстрация работы курсора

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:84баллов,
  • Очки рейтинга4
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:42баллов,
  • Очки рейтинга-8
ОК

Qt - Тест 001. Сигналы и слоты

  • Результат:47баллов,
  • Очки рейтинга-6
Последние комментарии
ИМ
Игорь Максимов22 ноября 2024 г. 21:51
Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 октября 2024 г. 23:37
Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 октября 2024 г. 17:19
Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5 октября 2024 г. 16:51
Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55 июля 2024 г. 20:02
QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Сейчас обсуждают на форуме
f
firstlunoxod15 февраля 2025 г. 13:46
Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
Дмитрий
Дмитрий3 февраля 2025 г. 16:24
Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
NW
Nayo Wai30 января 2025 г. 19:22
не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
n
nkly3 января 2025 г. 12:52
Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
M
Marsel17 августа 2023 г. 0:26
OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

Следите за нами в социальных сетях