понедельник, 31 января 2011 г.

Qt. Установка собственного курсора в приложение

        В некоторых программах смена курсора в приложении весьма необходима. Возьмём к примеру тот же 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 курсоров проявляется оссобенно в том, что их легче найти в сети, или же сделать самому.

Комментариев нет:

Отправить комментарий