Qt/C++ - Lesson 022. How to change cursor shape in Qt?

mouse, QCursor, Qt, Qt уроки

The task "to customize the cursor in the" confronts a programmer when required by the design of the program, or is being developed game software, and it becomes a matter of design and atmosphere of the game.

Customization cursor in Qt is a trivial task, which includes installing a custom cursor for each visual object that is present in the game or program. When you hover over the object, the cursor changes its appearance according to the image that has been set in the object as the cursor.

In Qt project by default, the window in which it is inherited from QWidget, even no need to connect additional headers. All you need to do - is to create a class object via QCursor QPixmap from a resource file.

As the resource files necessary to create the image with the extension PNG and dimensions of 32x32 pixels. This size is recommended by the documentation for Qt, because it is widely supported.

This example uses three image:

  • cursorTarget.png - the cursor will be used in the field of QGraphicsView;
    cursorArrowRed.png - active cursor would be used in a window as a whole;
    cursorArrowGreen.png - the cursor will be used in the field of the button.

Cursors:

Changing the cursor

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

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

    // Create a target cursor from a resource file
    QCursor cursorTarget = QCursor(QPixmap(":/cursor/cursorTarget.png"));
    ui->graphicsView->setCursor(cursorTarget); // Set the cursor target

    /* Create a pointer (red arrow) and
     * Move the cursor hot spot on the positions x = 0 y = 0
     * */
    QCursor cursorRed = QCursor(QPixmap(":/cursor/cursorArrowRed.png"), 0, 0);
    this->setCursor(cursorRed); // Set the cursor

    /* Create a cursor (green arrow) and
     * Move the cursor hot spot on the positions x = 0 y = 0
     * */
    QCursor cursorGreen = QCursor(QPixmap(":/cursor/cursorArrowGreen.png"),0,0);
    ui->pushButton->setCursor(cursorGreen);     // Set the cursor
    ui->pushButton_2->setCursor(cursorGreen);   // Set the cursor
}

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

Demonstration cursor operation

Virtual hosting with 10 percent discount
Virtual hosting with 10 percent discount
EVILEG offers reliable hosting with a 10% discount for virtual hosting and 5% for VPS
Support the author Donate

Comments

Only authorized users can post comments.
Please, Log in or Sign up
TT
June 13, 2019, 7:01 p.m.
Taimoor Tanweer

C++ - Test 001. The first program and data types

  • Result:66points,
  • Rating points-1
TT
June 13, 2019, 6:51 p.m.
Taimoor Tanweer

C++ - Test 002. Constants

  • Result:75points,
  • Rating points2
ВМ
June 13, 2019, 12:30 p.m.
Ваня Мороз

C++ - Test 001. The first program and data types

  • Result:100points,
  • Rating points10
Last comments
i
June 17, 2019, 6:10 a.m.
ingenfly

Только по осям xAxis2, уAxis2 значения начинаются с 0. Почему-то xAxis2 и xAxis не синхронизированы по данным. Ну и QCustomPlot последний.
June 16, 2019, 8:21 p.m.
Евгений Легоцкой

Добрый день. Ну точно также добавляете ту же самую информацию на ось xAxis2, только добавляете другое форматирование customPlot->xAxis2->setDateTimeFormat("hh:mm"); если я ...
EF
June 14, 2019, 1:56 p.m.
Egor Fomin

Спасибо за ваш ответ, у меня получилось реализовать это. Тем не менее появилась другая проблема, поэтому опять надеюсь на вашу помощь. Скажем, я уже выставил точки и они соеденены. Когда я нач...
d
June 13, 2019, 2:47 p.m.
damix

Можно классу, который описывает точку, добавить сигнал, который подавать (emit), когда точка перемещается (переопределить mouseMoveEvent или mouseReleaseEvent). Так вот эти сигналы у каждой из...
i
June 13, 2019, 2:09 p.m.
ingenfly

Здравствайте! Подскажите, пожалуйста: customPlot->xAxis2->setTickLabels(true); //Здесь включается отображение данных на оси xAxis2. а можно как-то продублировать информацию cus...
Now discuss on the forum
June 20, 2019, 9:30 a.m.
IscanderChe

Вернулся к этой задачке только-только, поэтому и не ответил ничего раньше.Как переопределить mouseReleaseEvent(QMouseEvent* event) у QTableView, если QTableView задан в ui? Или задавать QTabl...
I
June 19, 2019, 1:41 p.m.
Intruder

Всем добрый день. При разборе XML файла наткнулся на тег вот такого плана: <TagName attribute1="value1" attribute2="value2" /> При попытке проверить на наличие такого элеме...
June 19, 2019, 12:55 p.m.
Михаиллл

Скажите пожалуйста, как его в таком случае перемещать и удалять?
June 18, 2019, 7:50 p.m.
Дмитрий

Большое спасибо! SDK заработал.К сожалению удалось продвинутся только на один шаг. При сборке чистого проекта NDK выдаёт следующие ошибки C:\Android\ndk-bundle/toolchains/arm-linux-andr...
June 18, 2019, 4:59 p.m.
Михаиллл

Добрый день.В этом учебнике представлен код INSTALLED_APPS = ( ... 'rest_framework', 'snippets.apps.SnippetsConfig',) На строчке 'snippets.apps.SnippetsConf...
Looking for a Job?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

EVILEG
About
Services
Join us
© EVILEG 2015-2019
Recommend hosting TIMEWEB