crossplatform.ru

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


  Ответ в Смена курсора на виджете
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Elfinit Дата 1.10.2009, 18:56
  Решение:
graphicsProxyWidget() ? graphicsProxyWidget()->setCursor(Qt::SizeVerCursor) : setCursor(Qt::SizeVerCursor);
kwisp Дата 1.10.2009, 8:33
 
Цитата(Elfinit @ 1.10.2009, 0:39) *
т.к. обработаты все возможные значения типа Enm_CursorPosition.

хочешь сказать нельзя присвоить переменной enum`a значение не из области этого enum`a ?


Цитата(Elfinit @ 1.10.2009, 0:39) *
Массив чего?

можно массив указателей на функции.
Цитата(Elfinit @ 1.10.2009, 0:39) *
Что конкретно делать, или хотя бы в какую сторону копать - не понятно..

можно вывести в консоль код события и посмотреть очередность, я так делал когда имел схожие проблемы.
может перекрыть мешающее тебе событие?
BRE Дата 1.10.2009, 6:52
 
Цитата(Elfinit @ 30.9.2009, 23:26) *
Т.е. при addWidget на самом деле на сцену вешается GraphicsItem?

Да, посмотри что возвращает addWidget:
QGraphicsProxyWidget * QGraphicsScene::addWidget ( QWidget * widget, Qt::WindowFlags wFlags = 0 )

Цитата(Elfinit @ 30.9.2009, 23:26) *
И вообще, зачем ему менять курсор на дефолтный?

Потому что, если для элемента не задан курсор, то использует дефолтный.

Как мне кажется, сначала отрабатывает обработчик события перемещения мыши для твоего виджета (там ты меняешь курсор на нужный), а потом отрабатывает этот же обработчик в view (и меняет курсор на тот который задан для элемента и если он не задан, то дефолтный). Посмотри исходники, возможно это можно обойти.
Elfinit Дата 30.9.2009, 23:39
 
Цитата(kwisp @ 1.10.2009, 0:07) *
switch
не пугает?
а default где?

Не особо) Дефолт не требуется, т.к. обработаты все возможные значения типа Enm_CursorPosition.

Цитата(kwisp @ 1.10.2009, 0:07) *
а массив не поможет?


Массив чего?

Цитата(kwisp @ 1.10.2009, 0:07) *
может дело в событиях.
для графСцены и обычных виджетов они разные соответственно и обработчики разные.

Да вроде поняли, что в событиях...Что конкретно делать, или хотя бы в какую сторону копать - не понятно..
kwisp Дата 30.9.2009, 23:07
  и я позволю себе повториться.
switch
не пугает?
а default где?
а массив не поможет?


может дело в событиях.
для графСцены и обычных виджетов они разные соответственно и обработчики разные.
Elfinit Дата 30.9.2009, 22:26
  Да, ещё, брешить на неверно вычисленные координаты тоже не стоит, т.к. "области интереса" (границы прямоугольника, углы) вычисляются точно верно, т.к. перетаскивание границ (за любую границу, за угол, перетаскивание выделенной области) нормально работает, правда вместо нужного курсора показывается ArrowCursor, что, естественно, неудобно жутко....

Цитата(BRE @ 30.9.2009, 23:20) *
Цитата(Elfinit @ 30.9.2009, 23:11) *
Повторюсь, если встаивать этот виджет в диалог, всё срабатывает идеально.

А диалоги не пытаются изменяют курсор в зависимости от положения мыши. :)

Цитата(Elfinit @ 30.9.2009, 23:11) *
А для GraphicsView mouseMove я вообще не переопределял, т.к. и не наследовал от него...

А зачем от него наследоваться?
Каждый виджет на сцене располагается в элементе сцены и ведет себя для QGraphicsView как элемент сцены.

Возможно (не точно/IMHO) дело в этом (тоже позволю себе повториться):
При перемещении мыши над QGraphicsView он постоянно проверяет над каким элементом сцены находиться мышка и устанавливает курсор на тот который задан в элементе. Возможно происходит следующее, ты меняешь курсор мыши, а следом QGraphicsView меняет его на дефолтный.


Т.е. при addWidget на самом деле на сцену вешается GraphicsItem? И вообще, зачем ему менять курсор на дефолтный? К тому же, как уже сказал, для GraphicsItem-ов, которые висят на сцене, курсор меняется без проблем при проведении мыши над ними....



Вот ещё что заметил....Если каким-то чудесным образом курсор всё-таки поменялся на актуальный (например, на SizeHor), то он не меняется вообще ни на какой до тех пор, пока курсор находится над виджетом.
BRE Дата 30.9.2009, 22:20
 
Цитата(Elfinit @ 30.9.2009, 23:11) *
Повторюсь, если встаивать этот виджет в диалог, всё срабатывает идеально.

А диалоги не пытаются изменяют курсор в зависимости от положения мыши. :)

Цитата(Elfinit @ 30.9.2009, 23:11) *
А для GraphicsView mouseMove я вообще не переопределял, т.к. и не наследовал от него...

А зачем от него наследоваться?
Каждый виджет на сцене располагается в элементе сцены и ведет себя для QGraphicsView как элемент сцены.

Возможно (не точно/IMHO) дело в этом (тоже позволю себе повториться):
При перемещении мыши над QGraphicsView он постоянно проверяет над каким элементом сцены находиться мышка и устанавливает курсор на тот который задан в элементе. Возможно происходит следующее, ты меняешь курсор мыши, а следом QGraphicsView меняет его на дефолтный.
Elfinit Дата 30.9.2009, 22:11
 
Цитата(ufna @ 30.9.2009, 22:53) *
Elfinit,
не подскажешь, каким методом метаданные из изображения вытаскиваешь? Имеешь ли дело с EXIF?

Да, с ним самым. Библиотека называется exiv2 (http://www.exiv2.org). Под линуксом её даже собирать не надо, всего и делов - скачать пакет и прилинковаться к нему.
Инструкция по винде есть тут , сам когда-то ковырялся с этим...

Цитата(BRE @ 30.9.2009, 23:02) *
Цитата(Elfinit @ 30.9.2009, 22:42) *
Устанавливаю как раз в методе getCursorPosition (в конце каждого из условий вызывается setCursor). Для GraphicsView курсор я нигде не меняю вроде.

Откуда вызывается эта функция?

При перемещении мыши над QGraphicsView он постоянно проверяет над каким элементом сцены находиться мышка и устанавливает курсор на тот который задан в элементе. Возможно происходит следующее, ты меняешь курсор мыши, а следом QGraphicsView меняет его на дефолтный.


Вот код для маусМува виджета:
void PhotoFormatter::mouseMoveEvent(QMouseEvent *event)
{    
    event->accept();  
    if (event->buttons() & Qt::LeftButton) //зажата кнопка мыши - возможно, нужно перетаскивать границы...
    {
        switch (curPos)
        {
            case PhotoFormatter::curpos_inRect:process_inRect(event); break;
            case PhotoFormatter::curpos_behind:process_behind(event);break;
            case PhotoFormatter::curpos_bottomBorder:process_bottomBorder(event);break;
            case PhotoFormatter::curpos_leftBorder:process_leftBorder(event);break;
            case PhotoFormatter::curpos_leftBottomCorner:process_leftBottomCorner(event);break;
            case PhotoFormatter::curpos_leftTopCorner:process_leftTopCorner(event);break;
            case PhotoFormatter::curpos_rightBorder:process_rightBorder(event);break;
            case PhotoFormatter::curpos_rightBottomCorner:process_rightBottomCorner(event);break;
            case PhotoFormatter::curpos_rightTopCorner:process_rightTopCorner(event);break;
            case PhotoFormatter::curpos_topBorder:process_topBorder(event);break;
            case PhotoFormatter::curpos_undefined:process_undefined(event);break;
        }
    }
    else
    {
        getCursorPosition(event->pos());
    }

    actionPoint = event->pos();
    update();

    QLabel::mouseMoveEvent(event);
}


Повторюсь, если встаивать этот виджет в диалог, всё срабатывает идеально. А для GraphicsView mouseMove я вообще не переопределял, т.к. и не наследовал от него...
BRE Дата 30.9.2009, 22:02
 
Цитата(Elfinit @ 30.9.2009, 22:42) *
Устанавливаю как раз в методе getCursorPosition (в конце каждого из условий вызывается setCursor). Для GraphicsView курсор я нигде не меняю вроде.

Откуда вызывается эта функция?

При перемещении мыши над QGraphicsView он постоянно проверяет над каким элементом сцены находиться мышка и устанавливает курсор на тот который задан в элементе. Возможно происходит следующее, ты меняешь курсор мыши, а следом QGraphicsView меняет его на дефолтный.
ufna Дата 30.9.2009, 21:53
  Elfinit,
не подскажешь, каким методом метаданные из изображения вытаскиваешь? Имеешь ли дело с EXIF?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 12:48