Здравствуйте. Решил я было реализовать свой вариант Сапера средствами Qt. Пишу под виндой. В качестве ячеек поля решил использовать наследуемый от QLabel класс Label. Вопрос возник с работой мыши, точнее перехватом от нее сообщений. Есть там такой режим в сапере, когда при зажатой левой кнопке мыши можно двигать курсор по полю и при этом ячейки под курсором будут какбы нажиматься. Для отлавливания событий входа и выхода из виджета (т.е. объекта Label) переопределил методы enterEvent(QEvent *event) и leaveEvent(QEvent *event). Для проверки просто оставил:
/*virtual*/
void Label::enterEvent(QEvent *event)
{
qDebug() << "enterEvent";
}
/*virtual*/
void Label::leaveEvent(QEvent *event)
{
qDebug() << "leaveEvent";
}
/*virtual*/
void Label::mouseMoveEvent(QMouseEvent* event)
{
if (QApplication::mouseButtons() & Qt::LeftButton)
qDebug() << "mouseMoveEvent";
}
Также переопределил метод mouseMoveEvent(QMouseEvent* event) чтобы изменять параметры виджета в процессе перемещения курсора. Проблема заключается в следующем:
Если свободно водить курсором по этим виджетам, то в дебаг выводятся только сообщения enterEvent и leaveEvent. Это вроде как нормально. Но вот при нажатии левой кнопке выводятся только сообщения mouseMoveEvent, т.е. события enterEvent и leaveEvent перестают обрабатываться, и, соответственно виджеты не изменяются (изменение хочу как раз таки сделать по событиям enterEvent и leaveEvent). По незнанию предположил, что при зажатой кнопке включается режим перетаскивания, однако переопределение соответсвующих методов и аналогичный вывод информации в дебаг показали, что эти события не обрабатываются. При создании виджетов сразу вызываю метод setMouseTracking(true).
Подскажите пожалуйста, в чем я неправ или дайте пожалуйста совет, как лучше поступить с обработкой этих событий.
Заранее благодарен.