crossplatform.ru

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


  Ответ в MouseMove event за пределами окна
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
druss Дата 5.5.2010, 11:42
 
Цитата(BRE @ 5.5.2010, 11:37) *
Для проверки, попробуй grabMouse() выполнять в конструкторе MainWindow.

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

Ну это понятно, но мне нужно без нажатия, просто что бы в мою программу всегда приходило событие о перемещении мыши, даже если окно программы свернуто. Вариант с grabMouse был бы самый раз, если бы он позволял нормально функционировать остальным приложениям. Я заметил что он посылает события дальше, но как-то очень редко...
BRE Дата 5.5.2010, 11:37
  Для проверки, попробуй grabMouse() выполнять в конструкторе MainWindow.
Вообще, используется примерно следующий алгоритм:
при каком-то событии,например, нажали кнопку мышки, происходит захват мыши и указанный виджет обрабатывает все события от мышки, а при отпускании кнопки, мышка освобождается. Это необходимо например, для обработки изменения размеров виджета.

Посмотри, как реализовано изменение размеров в QMdiSubWindow.
druss Дата 5.5.2010, 11:33
 
Цитата(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, 10:57
 
Цитата(druss @ 5.5.2010, 11:54) *
смотрел, даже пробовал. Оно захватывает мышь, но не передает события дальше в систему...

А это включал?
void QWidget::setMouseTracking ( bool enable )
druss Дата 5.5.2010, 10:54
  смотрел, даже пробовал. Оно захватывает мышь, но не передает события дальше в систему...
BRE Дата 5.5.2010, 10:16
 
Цитата(druss @ 5.5.2010, 10:34) *
Как можно получать событие перемещения мыши если она перемещается за пределами окна (кнопка не нажата)?

Посмотри на void QWidget::grabMouse ()
druss Дата 5.5.2010, 9:34
  Как можно получать событие перемещения мыши если она перемещается за пределами окна (кнопка не нажата)?
Спасибо за ответ.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 19.4.2024, 7:29