Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB

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

Comments

Only authorized users can post comments.
Please, Log in or Sign up
P
Feb. 18, 2019, 3:39 p.m.
Poyar

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

  • Result:73points,
  • Rating points1
НБ
Feb. 15, 2019, 1:03 p.m.
Николай Булахтин

C++ - Test 002. Constants

  • Result:25points,
  • Rating points-10
Last comments
V
Feb. 14, 2019, 6:41 p.m.
Vlad15007

Спасибо огромное! Заработало!
А
Feb. 12, 2019, 9:26 a.m.
Александр90

Сам разборался, спасибо.
А
Feb. 12, 2019, 8:19 a.m.
Александр90

День добрый! Можешь выложить форму mainwindow.ui от урока? Заранее спасибо
Feb. 11, 2019, 10:51 a.m.
Евгений Легоцкой

Нет, у меня проблема с жёстким диском случилась, занимался восстановлением ПК, ещё пару вечеров придётся этим заниматься, увы.
Now discuss on the forum
Feb. 17, 2019, 5:28 p.m.
Евгений Легоцкой

Добрый день. Очень извиняюсь за долгий ответ Первое, что нашёл, так это необходимость перерисовать чекбокс. void CheckBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem ...
Feb. 15, 2019, 3:36 p.m.
Евгений Легоцкой

Ну я тут нашёл одно решение, но сам его не проверял. Вам нужно помещать фамилии скорее всего в ячейки заголовка, и потом просто перерисовывать их QHeaderView * header = m_ui->tableWidget...
Feb. 15, 2019, 7:53 a.m.
Евгений Легоцкой

Добрый день! Не работал с remoteobjects, поэтому глянул документацию, чтобы рассмотреть, что это за зверь. После просмотра документации сложилось стойкой впечатление, что это вполне возм...
m
Feb. 14, 2019, 6:28 p.m.
mr_roman

Нашел решение на Java. Удалось интегрировать в проект сервиса на Qt, теперь из Qt запускаю Java-код акселерометра.
Join us in social networks

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