获取鼠标在QLabel中的位置

时间:2010-12-04 10:58:24

标签: c++ qt point-of-sale mousepress

在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。我在这里做错了什么想法?

2 个答案:

答案 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"

现在一切都运转良好。