0

QLabelposで aを取得する最良の (最も単純な) 方法は何ですか? mousePressedEvent(または、基本的には、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ます。ここで私が間違っていることはありますか?

4

2 に答える 2

9

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()を再実装する方が簡単です。

于 2010-12-04T15:20:28.430 に答える