crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> MouseMove event за пределами окна
Гость_druss_*
сообщение 5.5.2010, 9:34
Сообщение #1





Гости








    


Как можно получать событие перемещения мыши если она перемещается за пределами окна (кнопка не нажата)?
Спасибо за ответ.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 5.5.2010, 10:16
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(druss @ 5.5.2010, 10:34) *
Как можно получать событие перемещения мыши если она перемещается за пределами окна (кнопка не нажата)?

Посмотри на void QWidget::grabMouse ()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
druss
  опции профиля:
сообщение 5.5.2010, 10:54
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 5.5.2010
Пользователь №: 1692

Спасибо сказали: 0 раз(а)




Репутация:   0  


смотрел, даже пробовал. Оно захватывает мышь, но не передает события дальше в систему...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 5.5.2010, 10:57
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(druss @ 5.5.2010, 11:54) *
смотрел, даже пробовал. Оно захватывает мышь, но не передает события дальше в систему...

А это включал?
void QWidget::setMouseTracking ( bool enable )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
druss
  опции профиля:
сообщение 5.5.2010, 11:33
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 5.5.2010
Пользователь №: 1692

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(BRE @ 5.5.2010, 10:57) *
void QWidget::setMouseTracking ( bool enable )

Да, но оно отвечает за высылку событий при перемещении без нажатия кнопок, за пределами окна оно все равно не высылает события.
Если в
void MainWindow::mouseMoveEvent(QMouseEvent* pe)
{

    this->grabMouse(); //добавить это.
    ui->label->setText(QString::number(pe->globalX()));
}

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

так же пробовал
void MainWindow::leaveEvent(QEvent *ev)
{
    grabMouse();
}

void MainWindow::enterEvent(QEvent *ev)
{
    releaseMouse();
}

Тоже нормально не может передать события в систему. :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 5.5.2010, 11:37
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Для проверки, попробуй grabMouse() выполнять в конструкторе MainWindow.
Вообще, используется примерно следующий алгоритм:
при каком-то событии,например, нажали кнопку мышки, происходит захват мыши и указанный виджет обрабатывает все события от мышки, а при отпускании кнопки, мышка освобождается. Это необходимо например, для обработки изменения размеров виджета.

Посмотри, как реализовано изменение размеров в QMdiSubWindow.


Сообщение отредактировал BRE - 5.5.2010, 11:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
druss
  опции профиля:
сообщение 5.5.2010, 11:42
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 5.5.2010
Пользователь №: 1692

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(BRE @ 5.5.2010, 11:37) *
Для проверки, попробуй grabMouse() выполнять в конструкторе MainWindow.

Runtime error.
Цитата(BRE @ 5.5.2010, 11:37) *
Вообще, используется примерно следующий алгоритм:
при каком-то событии,например, нажали кнопку мышки, происходит захват мыши и указанный виджет обрабатывает все события от мышки, а при отпускании кнопки, мышка освобождается. Это необходимо например, для обработки изменения размеров виджета.

Ну это понятно, но мне нужно без нажатия, просто что бы в мою программу всегда приходило событие о перемещении мыши, даже если окно программы свернуто. Вариант с grabMouse был бы самый раз, если бы он позволял нормально функционировать остальным приложениям. Я заметил что он посылает события дальше, но как-то очень редко...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.11.2019, 9:14