Отслеживание курсора мыши в QWidget - PullRequest
2 голосов
/ 14 ноября 2010

Я использую mouseMoveEvent для отслеживания положения курсора мыши в простом приложении QT. Моя проблема в том, что я хочу, чтобы mouseMoveEvent срабатывал только тогда, когда курсор находится в 400x400 QWidget. Прямо сейчас это стреляет независимо от того, где мышь. Вот мой код ...

void IPA2::mouseMoveEvent(QMouseEvent * event) {
     cout << event->x() << endl;
     cout << event->y() << endl;
}

IPA2 - это название моего класса. Пользовательский интерфейс был создан в режиме конструктора.

1 Ответ

2 голосов
/ 14 ноября 2010

Если я вас правильно понимаю, вы можете просто выполнить проверку здесь, например if (x,y in range) do_something.

Другим способом было бы создать поддельный виджет с размерами 400x400 и переопределить это событие мыши.

Третий (вероятно, излишний) должен использовать фильтры событий (см. здесь ).

Обновление:

Вы не можете просто "легко" обрабатывать события мыши, используя Qt Designer.Каждая .ui схема почти всегда связана с соответствующей реализацией для этой схемы.Вот где ваша обработка должна быть сделана.

Qt Designer отлично подходит для автоматической обработки слотов сигналов, но mouseMoveEvent - это event и не имеет ничего общего с системой слотов.

Я бы сказал, как бы это реализовать, и вы можете выбрать (см. Три возможных способа ранее).

Я бы создал DummyWidget, который имел бы размеры 400x400 и пользовательскиевиртуальный mouseMoveEvent метод, который фактически обрабатывает движение мыши.

В конструкторе моего главного окна (который также выполняет конструкцию .ui-based) я бы сказал что-то вроде

dummy_widget_ = new DummyWidget(...);
// `dummy_widget_` is a private `DummyWidget*` member of the main window

и затем, вероятно, переместит его куда-нибудь .

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

Еще один момент, связанный только с событиями мыши: http://doc.qt.nokia.com/4.7/qwidget.html#mouseTracking-prop

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...