Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Toha_r от Июль 13, 2009, 15:16



Название: [QT 4.5] Моргание курсора мыши в главном окне.
Отправлено: Toha_r от Июль 13, 2009, 15:16
Доброго времени суток всем.

Есть главное окно (MainFrame). Так же есть объект, который не принадлежит QT и сам производит рисование на контекст окна. Он занимает не всю область окна. При прохождении поверх него мыши, объект сам меняет состояние курсора (в частности под виндой он устанавливает курсор через системную функцию SetCursor по хендлу окна). Обработка мышиных сообщений производится в главном окне и при необходимости транслируется в объект.

Проблема заключается в следующем: когда объект устанавливает свой курсор, QT при следующем сообщении MouseMove устанавливает свой курсор и не ведает о том, что курсор сменили на нужный. И получается, что при ведении мыши курсор очень часто меняется, т.е. моргает.

Получать сообщения от объекта о смене курсора нет возможности.

Можно ли это как-нить побороть?


Название: Re: [QT 4.5] Моргание курсора мыши в главном окне.
Отправлено: ecspertiza от Июль 13, 2009, 15:33
У меня такой вопрос, а нафига тебе такой геморой, стандартная КуТешная функция setCursor чем неподходит ?


Название: Re: [QT 4.5] Моргание курсора мыши в главном окне.
Отправлено: Toha_r от Июль 13, 2009, 15:41
Подключается плугин и нету его исходников. Так же нету возможно его переписать.


Название: Re: [QT 4.5] Моргание курсора мыши в главном окне.
Отправлено: ecspertiza от Июль 13, 2009, 18:12
Ну попробуй сделать так.

Переопредели функцию enterEvent ( QEvent * event ) и если event->type() == 10 то получи состояние курсора через свойство cursor, и установи его ещё раз тоесть по сути нужно сделать так
Код:
    if (event->type() == 10)
        {
            setCursor(cursor());
        }
   
    QWidget::event(event);
нефакт что сработает но попробовать можно:)


Название: Re: [QT 4.5] Моргание курсора мыши в главном окне.
Отправлено: Toha_r от Июль 14, 2009, 11:43
Да, это возможно помогло, если бы установка курсора из объекта/плагина шла бы через QT, но т.к. она идет через системные функции, то QT не запоминает установленный курсор и продолжает ставить свой. Вот в этом проблема и заключается.

Пробовал переустанавливать курсор следующим образом:
Код
C++ (Qt)
HCURSOR hCur = ::GetCursor(); // from MS Windows
QApplication::setOverrideCursor(QCursor(hCur)); // to QT
 

Но результат оказался тем же. Курсор продолжает промаргивать. Так же пробовал запоминать виндовый курсор и устанавливать каждый раз по сообщению MouseMove, как это делает сама QT.