В некоторых программах смена курсора в приложении весьма необходима. Возьмём к примеру тот же Paint или Photoshop - довольно непривычно рисовать изображения с помощью одной стрелки. В Qt есть удобный инструмент работы с курсорами, но тоже как и во всех языках не без ньюансов.
Первый раз я начал загружать курсор в формате Cur. Довольно простой распространённый формат в интернете. Но после долгих поисков, осуществить это я не смог. Оказалось, что Qt не поддерживает формат Cur, они просто отказались от него.
С одной стороны непонятно, зачем просто выбрасывать его. Но с другой - зачем он нужен, если существует PNG? PNG поддерживает палитру гораздо побогаче, чем Cur, пусть даже занимая немного больше места.
Подключение курсора к приложению:
Подключить курсор очень легко. Курсор объявляется с помощью класса QCursor. Я определял курсор как закрытый член класса, поэтому делал его как указатель:
QCursor* myCursor;
Дальше берём PNG картинку, которая будет нашим курсором и связываем её в таком виде:
myCursor = new QCursor(QPixmap("cursor/myCursor.png"), hotX, hotY);
Картинка загружается как объект QPixmap. Что такое hotX и hotY? Это точка типа int на курсоре, к которой привязывается место клика мышки. Если hotX равно -1, то по координате Х будет взята середина изображения, если hotY равно -1, то по координате Y будет взята середина изображения. Таким образом при значениях -1,-1 местом клика будет центр курсора.
Чтобы отобразить наш курсор нужно вызвать функцию setCursor. Например, если мы создали виджет с именем wgt, то установка курсора в нём будет выглядеть так:
wgt.setCursor(*myCursor);
Если же не создавать указатель на QCursor, как я делал это, то можно выполнить всё одной функцией:
wgt.setCursor(QCursor(QPixmap("cursor/myCursor.png", hotX, hotY));
Как видно оба способа довольно просты и понятны. Преимущество PNG курсоров проявляется оссобенно в том, что их легче найти в сети, или же сделать самому.