Завдання "Кастомізувати курсор у програмі" постає перед програмістом тоді, коли цього вимагає дизайн програми, або йде розробка ігрового ПЗ, і це стає питанням дизайну та атмосфери гри.
Кастомізація курсора у 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; }