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
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 16.4.2024, 6:58