Russian Qt Forum
Сентябрь 30, 2024, 02:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [QT 4.5] Моргание курсора мыши в главном окне.  (Прочитано 4766 раз)
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]   Вверх
  Печать  
 
Перейти в:  


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