crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 12.7.2025, 8:29