crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Смена курсора на виджете
Elfinit
  опции профиля:
сообщение 30.9.2009, 9:32
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


Доброе утро!
В общем, есть виджет PhotoFormatter, предназначенный для обрезки краёв фотографии. Может встраиваться в отдельный диалог, а может и в главное окно, в GraphicsView. При наведении курсора на края выделенной области он меняется, соответственно, на разные стрелки ресайза. А при наведении на выделенную область - на OpenHand, для перемещения выделенной области. Так вот, в случае диалога это срабатывает идеально, при работе в GraphicsView - курсор почти всегда не меняется. С чем это может быть связано?
Вот код функции определения вида курсора:
Раскрывающийся текст
PhotoFormatter::Enm_CursorPosition PhotoFormatter::getCursorPosition(const QPoint &pt)
{
    if (             pt.x() > areaRect.left()+3 &&
                         pt.y() > areaRect.top() + 3 &&
                         pt.x() < areaRect.right()-6 &&
                         pt.y() < areaRect.bottom()-6)
    {
        setCursor(Qt::OpenHandCursor);
        return PhotoFormatter::curpos_inRect;
    }
    if (          pt.y() > areaRect.top() + 2 &&
            pt.y() < areaRect.bottom() - 2 &&
            pt.x() > areaRect.left() - 2 &&
            pt.x() < areaRect.left() + 2)
    {
        setCursor(Qt::SizeHorCursor);
        return PhotoFormatter::curpos_leftBorder;
    }
    if (        pt.y() > areaRect.top() + 2 &&
            pt.y() < areaRect.bottom() - 2 &&
            pt.x() > areaRect.right() - 2 &&
            pt.x() < areaRect.right() + 2)
    {
        setCursor(Qt::SizeHorCursor);
        return PhotoFormatter::curpos_rightBorder;
    }
    if (        pt.x() > areaRect.left() + 2 &&
            pt.x() < areaRect.right() - 2 &&
            pt.y() > areaRect.top() - 2 &&
            pt.y() < areaRect.top() + 2)
    {
        setCursor(Qt::SizeVerCursor);
        return PhotoFormatter::curpos_topBorder;
    }
    if (        pt.x() > areaRect.left() + 2 &&
            pt.x() < areaRect.right() - 2 &&
            pt.y() > areaRect.bottom() - 2 &&
            pt.y() < areaRect.bottom() + 2)
    {
        setCursor(Qt::SizeVerCursor);
        return PhotoFormatter::curpos_bottomBorder;
    }
    if (        pt.x() > areaRect.left() - 2 &&
            pt.x() < areaRect.left() + 2 &&
            pt.y() > areaRect.top() - 2 &&
            pt.y() < areaRect.top() + 2)
    {
        setCursor(Qt::SizeFDiagCursor);
        return PhotoFormatter::curpos_leftTopCorner;
    }
    if (        pt.x() > areaRect.left() - 2 &&
            pt.x() < areaRect.left() + 2 &&
            pt.y() > areaRect.bottom() - 2 &&
            pt.y() < areaRect.bottom() + 2)
    {
        setCursor(Qt::SizeBDiagCursor);
        return PhotoFormatter::curpos_leftBottomCorner;
    }
    if (        pt.x() > areaRect.right() - 2 &&
            pt.x() < areaRect.right() + 2 &&
            pt.y() > areaRect.top() - 2 &&
            pt.y() < areaRect.top() + 2)
    {
        setCursor(Qt::SizeBDiagCursor);
        return PhotoFormatter::curpos_rightTopCorner;
    }
    if (        pt.x() > areaRect.right() - 2 &&
            pt.x() < areaRect.right() + 2 &&
            pt.y() > areaRect.bottom() - 2 &&
            pt.y() < areaRect.bottom() + 2)
    {
        setCursor(Qt::SizeFDiagCursor);
        return PhotoFormatter::curpos_rightBottomCorner;
    }
    setCursor(Qt::ArrowCursor);
    return PhotoFormatter::curpos_behind;    
}


Сообщение отредактировал Litkevich Yuriy - 1.10.2009, 6:06
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
kwisp
  опции профиля:
сообщение 30.9.2009, 14:36
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Elfinit @ 30.9.2009, 10:32) *
С чем это может быть связано?

я думаю -- с координатами, надо проверить срабатывает условие или нет.

а чего if`ы у тебя такие ужасные?
что-то типа
bool QRect::contains ( const QPoint & point, bool proper = false ) const
не поможет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 30.9.2009, 16:36
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(Elfinit @ 30.9.2009, 10:32) *
С чем это может быть связано?

Может быть связано с тем, что QGraphicsView сам изменяет курсор в зависимости от объекта над которым находиться мышка. Это изменение, на сколько я помню, происходит в обработчике события mouseMoveEvent.
Где ты устанавливаешь свой курсор? Покажи код.

Сообщение отредактировал BRE - 30.9.2009, 16:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 30.9.2009, 21:42
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


Цитата(BRE @ 30.9.2009, 17:36) *
Цитата(Elfinit @ 30.9.2009, 10:32) *
С чем это может быть связано?

Может быть связано с тем, что QGraphicsView сам изменяет курсор в зависимости от объекта над которым находиться мышка. Это изменение, на сколько я помню, происходит в обработчике события mouseMoveEvent.
Где ты устанавливаешь свой курсор? Покажи код.

Устанавливаю как раз в методе getCursorPosition (в конце каждого из условий вызывается setCursor). Для GraphicsView курсор я нигде не меняю вроде.
Кстати, для GrapicsPixmapItem'ов, которые вшаются на сцену, курсор срабатывает нормально. Например, режим просмотра большой фотки - при наведении на фотку курсор меняется на лупу, двойной клик приводит к увеличению. Или в режиме просмотра набора фоток, когда на сцене висит куча айтемов, курсор при наведении меняется на ладошку. А вот если на сцену вешать не GraphicsItem, а Widget, то курсор элегантно слетает.....

Сообщение отредактировал Elfinit - 30.9.2009, 21:59
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.4.2024, 2:10