Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Обработка mouseMoveEvent


Автор: kuvshinka 3.9.2013, 13:50
в конструкторе чистого проекта (пустая mainwindow-форма) задаю  
Код

 this->setMouseTracking(true);

затем
Код

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
   qDebug() << event->pos().x() <<" "<<event->pos().y();
}


метод срабатывает только при уходе курсора мыши за пределы формы приложения, а не при каждом перемещении курсора по форме, как это и должно быть...что я неправильно сделала?
Никаких других методов (типа leaveEvent) в MainWindow нет...

Автор: bsa 3.9.2013, 14:11
В центре mainwindow должен находиться так называемый central widget. Лучше работай с ним, а не с main window.

Автор: kuvshinka 3.9.2013, 19:13
ничего не понимаю - под виндой mouseMoveEvent вообще никогда не вызывается (даже при выходе мыши за форму приложения)..действительно, на Mainwindow есть centralWidget, на нем - все остальные виджеты и что из этого? mouseMoveEvent-то является членом класса MainWindow...что значит "Лучше работай с centralWidget"? 

Автор: kuvshinka 3.9.2013, 21:52
не хватало задания setMouseTracking для centralwidget 

Автор: kuvshinka 4.9.2013, 15:31
Мне нужно знать координаты курсора мыши в ЛЮБОЙ точке формы приложения — для этого мне нужно для КАЖДОГО виджета формы задать свойство MouseTracking в true? Эксперимент показал, что вроде да, но виджетов у меня ооочень много и можно ли как-то по-другому, более рационально, решить данный вопрос?

И еще  - при клике левой кнопкой мыши чисто на форму ее метод (метод данного класса) mousePressEvent срабатывает, а при клике левой кнопкой мыши на любой из виджетов данной формы — нет (только при клике правой кнопкой мыши или колесиком)...почему такое может быть? Ведь вроде для срабатывания mousePressEvent никаких других свойств задавать не надо...

Автор: bsa 5.9.2013, 13:01
kuvshinka, тебе это знать надо постоянно или периодически? Если периодически, то можно повесить таймер, брать координаты курсора (QCursor::pos()) и мапить на окно.

Автор: kuvshinka 5.9.2013, 19:22
нет, мне нужно отслеживать каждое перемещение курсора (т.е. постоянно)!!! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)