Получение позиции щелчка мышью в QLabel
Каков наилучший (как в простейшем) способ получения pos
из mousePressedEvent
в QLabel? (Или просто получить местоположение щелчка мыши относительно виджета QLabel)
РЕДАКТИРОВАТЬ
Я попробовал то, что предложил Фрэнк таким образом:
bool MainWindow::eventFilter(QObject *someOb, QEvent *ev)
{
if(someOb == ui->label && ev->type() == QEvent::MouseButtonPress)
{
QMouseEvent *me = static_cast<QMouseEvent *>(ev);
QPoint coordinates = me->pos();
//do stuff
return true;
}
else return false;
}
Тем не менее, я получаю ошибку компиляции invalid static_cast from type 'QEvent*' to type 'const QMouseEvent*'
на линии, где я пытаюсь объявить me
, Есть идеи, что я здесь делаю не так?
2 ответа
Вы можете создать подкласс QLabel и переопределить mousePressEvent(QMouseEvent*). Или используйте фильтр событий:
bool OneOfMyClasses::eventFilter( QObject* watched, QEvent* event ) {
if ( watched != label )
return false;
if ( event->type() != QEvent::MouseButtonPress )
return false;
const QMouseEvent* const me = static_cast<const QMouseEvent*>( event );
//might want to check the buttons here
const QPoint p = me->pos(); //...or ->globalPos();
...
return false;
}
label->installEventFilter( watcher ); // watcher is the OneOfMyClasses instance supposed to do the filtering.
Преимущество фильтрации событий в том, что она более гибкая и не требует создания подклассов. Но если вам все равно нужно пользовательское поведение в результате полученного события или у вас уже есть подкласс, то проще просто переопределить fooEvent().
У меня такая же проблема
неверный static_cast...
Я просто забыл включить заголовок: #include "qevent.h"
Сейчас все работает хорошо.