Russian Qt Forum
Июня 10, 2025, 06:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [QT 4.5] Моргание курсора мыши в главном окне.  (Прочитано 4965 раз)
Toha_r
Гость
« : Июля 13, 2009, 15:16 »

Доброго времени суток всем.

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

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

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

Можно ли это как-нить побороть?
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #1 : Июля 13, 2009, 15:33 »

У меня такой вопрос, а нафига тебе такой геморой, стандартная КуТешная функция setCursor чем неподходит ?
Записан
Toha_r
Гость
« Ответ #2 : Июля 13, 2009, 15:41 »

Подключается плугин и нету его исходников. Так же нету возможно его переписать.
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Июля 13, 2009, 18:12 »

Ну попробуй сделать так.

Переопредели функцию enterEvent ( QEvent * event ) и если event->type() == 10 то получи состояние курсора через свойство cursor, и установи его ещё раз тоесть по сути нужно сделать так
Код:
    if (event->type() == 10)
        {
            setCursor(cursor());
        }
   
    QWidget::event(event);
нефакт что сработает но попробовать можно:)
Записан
Toha_r
Гость
« Ответ #4 : Июля 14, 2009, 11:43 »

Да, это возможно помогло, если бы установка курсора из объекта/плагина шла бы через QT, но т.к. она идет через системные функции, то QT не запоминает установленный курсор и продолжает ставить свой. Вот в этом проблема и заключается.

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

Но результат оказался тем же. Курсор продолжает промаргивать. Так же пробовал запоминать виндовый курсор и устанавливать каждый раз по сообщению MouseMove, как это делает сама QT.
« Последнее редактирование: Июля 14, 2009, 11:57 от Toha_r » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 2.618 секунд. Запросов: 23.