Evgenii Legotckoi
27 вересня 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;
}

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

Рекомендовані статті на цю тему

По статті запитували1питання

0

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up