在QLabel中获得pos
mousePressedEvent
的最佳方式(最简单)是什么? (或者基本上只获取相对于QLabel小部件的鼠标点击位置)
修改
我尝试了Frank以这种方式建议的内容:
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
。我在这里做错了什么想法?
答案 0 :(得分:8)
您可以继承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()即可。
答案 1 :(得分:0)
我遇到了同样的问题
static static_cast ...
我忘了添加标题:#include "qevent.h"
现在一切都运转良好。