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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как описать событие отпускание клавиши мыши вне области кнопки?  (Прочитано 5299 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Февраль 03, 2015, 12:43 »

Здравствуйте господа форумчане. Начал я разбираться немного с QEvent. И тут озадачился одной проблемой: Как описать событие - отпускание клавиши мыши вне области кнопки (при условии, что мышь отводят от кнопки после ее нажатия не отпуская клавишу мыши)? Какой QEvent использовать? Может необходимо как-то совмещать несколько? Но если я к примеру делаю вот  так:
Код:
if(event->type() == (QEvent::MouseButtonRelease | QEvent::MouseMove)){
           pushButton->setStyleSheet("QPushButton {background-color: red}");
}

то почему-то это не работает, но при этом при отжатии клавиши ctrl на клавиатуре, кнопка закрашивается. Как это понимать?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #1 : Февраль 03, 2015, 13:40 »

& вместо == попробуй
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Февраль 03, 2015, 13:42 »

// event->type() && (QEvent::MouseButtonRelease | QEvent::MouseMove)

А разве типы евентов могут быть комбинированными?
Записан

ammaximus
Гость
« Ответ #3 : Февраль 03, 2015, 13:49 »

Это вообще что-то не то, в чем состоит задача?

Если курсор уходит с кнопки (QWidget), кнопка перестает получать события, их теперь получает форма, на которой находится кнопка или куда там курсор передвинулся.

Чтобы отлавливать моменты перемещения в момент нажатия нужно отлавливать onMouseMove, и смотреть QMouseEvent::buttons(), который пришел во время мува.

Чтобы что-то куда-то перетаскивать нужно использовать драгндроп эвент.

А чтобы что-то подкрашивать при наведении вообще есть stylesheet:hover.

Уточните что именно хотите получить.
Записан
Bepec
Гость
« Ответ #4 : Февраль 03, 2015, 15:48 »

QEvent::MouseButtonRelease | QEvent::MouseMove как бы это  Побитовое ИЛИ (or)   a | b
И ваше условие некорректное, увы.
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #5 : Февраль 03, 2015, 19:12 »

Всем спасибо за ответы, учту.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #6 : Февраль 03, 2015, 19:47 »

Это вообще что-то не то, в чем состоит задача?

Если курсор уходит с кнопки (QWidget), кнопка перестает получать события, их теперь получает форма, на которой находится кнопка или куда там курсор передвинулся.
а в иос есть специальное событие для того, что хочет тс Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Февраль 04, 2015, 15:09 »

Как описать событие - отпускание клавиши мыши вне области кнопки (при условии, что мышь отводят от кнопки после ее нажатия не отпуская клавишу мыши)? Какой QEvent использовать?
Если курсор уходит с кнопки (QWidget), кнопка перестает получать события, их теперь получает форма, на которой находится кнопка или куда там курсор передвинулся.
Нет, если движение было с зажатой кнопкой, то widget на котором случилось нажатие продолжает получать события mouseMove и mouseRelease. Qt хранит его в переменной qt_button_down. Поэтому можно действовать проще, напр перекрыть mouseMoveEvent и/или mouseReleaseEvent.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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