Вопрос

Я пытаюсь создать приложение на Qt / C ++ с Qt4.5 и хочу, чтобы все активные окна изменяли непрозрачность при наведении курсора мыши...

Насколько я понимаю, в Qt нет явного события наведения курсора мыши.

Однако я получил элементарное функционирование, переопределив mousemoveevent() от QWidget в классе, который объявляет мое mainwindow.Но mousemoveevent из mainwindow не вызывается всякий раз, когда мышь перемещается по любому из групповых блоков, которые я там создал (понятно, поскольку QGroupBox имеет свою собственную переопределенную mousemoveevent).

Итак, в качестве дешевого решения я по-прежнему использую mousemoveevent моего mainwindow, но запрашиваю глобальное положение мыши и, основываясь на положении (x, y) mainwindow (полученном через -> pos()) и размере окна (-> size -> rHeight и rWidth), я проверяю, находится ли мышь в пределах области mainwindow и изменяю непрозрачность таким образом.

Это имело очень ограниченный успех.Правая граница работает нормально, левая изменяет непрозрачность на 4 пикселя раньше.Верхний не работает (предположительно, потому, что мышь проходит через панель меню и строку заголовка), а нижний меняется слишком рано.

Я думал создать пустой контейнерный класс QWidget, а затем поместить туда все остальное, но я чувствовал, что это все равно не решит большую проблему, связанную с тем, что базовый виджет не получает mousemoveevent, если он уже был реализован в дочернем виджете.

Пожалуйста, предложите любые исправления / ошибки, которые я внес в свой метод, или любые альтернативные методы для достижения этой цели.

p.s.Я сомневаюсь, что это имеет значение, но я работаю с Qt Creator IDE, а не с интеграцией Qt в VS2008 (в любом случае, это те же классы, но другой компилятор, mingw)

Это было полезно?

Решение

Установка фильтров событий для каждого из ваших дочерних виджетов может помочь с этим.Это позволит вашему главному окну получать дочерние события, такие как события из ваших групповых блоков.Вы можете найти пример кода здесь.

Другие советы

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

http://doc.trolltech.com/4.5/eventsandfilters.html#event-filters

Если я понимаю, что вы пытаетесь сделать, я бы переопределил enterEvent() виджета и leaveEvent() виджета.Событие ввода мыши вызвало бы затухание, а событие ухода вызвало бы затухание.

Редактировать:Перечитав несколько раз, я все еще не уверен, чего вы пытаетесь достичь.Извините, если мое предложение не поможет.:-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top