Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billy4685 от Февраль 03, 2015, 12:43



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

то почему-то это не работает, но при этом при отжатии клавиши ctrl на клавиатуре, кнопка закрашивается. Как это понимать?


Название: Re: Как описать событие отпускание клавиши мыши вне области кнопки?
Отправлено: kambala от Февраль 03, 2015, 13:40
& вместо == попробуй


Название: Re: Как описать событие отпускание клавиши мыши вне области кнопки?
Отправлено: gil9red от Февраль 03, 2015, 13:42
// event->type() && (QEvent::MouseButtonRelease | QEvent::MouseMove)

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


Название: Re: Как описать событие отпускание клавиши мыши вне области кнопки?
Отправлено: ammaximus от Февраль 03, 2015, 13:49
Это вообще что-то не то, в чем состоит задача?

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

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

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

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

Уточните что именно хотите получить.


Название: Re: Как описать событие отпускание клавиши мыши вне области кнопки?
Отправлено: Bepec от Февраль 03, 2015, 15:48
QEvent::MouseButtonRelease | QEvent::MouseMove как бы это  Побитовое ИЛИ (or)   a | b
И ваше условие некорректное, увы.


Название: Re: Как описать событие отпускание клавиши мыши вне области кнопки?
Отправлено: billy4685 от Февраль 03, 2015, 19:12
Всем спасибо за ответы, учту.


Название: Re: Как описать событие отпускание клавиши мыши вне области кнопки?
Отправлено: kambala от Февраль 03, 2015, 19:47
Это вообще что-то не то, в чем состоит задача?

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


Название: Re: Как описать событие отпускание клавиши мыши вне области кнопки?
Отправлено: Igors от Февраль 04, 2015, 15:09
Как описать событие - отпускание клавиши мыши вне области кнопки (при условии, что мышь отводят от кнопки после ее нажатия не отпуская клавишу мыши)? Какой QEvent использовать?
Если курсор уходит с кнопки (QWidget), кнопка перестает получать события, их теперь получает форма, на которой находится кнопка или куда там курсор передвинулся.
Нет, если движение было с зажатой кнопкой, то widget на котором случилось нажатие продолжает получать события mouseMove и mouseRelease. Qt хранит его в переменной qt_button_down. Поэтому можно действовать проще, напр перекрыть mouseMoveEvent и/или mouseReleaseEvent.