Qt: QMouseEvent — Как получить виджет

#qt

#qt

Вопрос:

Я использую QMouseEvent и QKeyEvents в своей программе. Я программно создаю различные виджеты ( QDockWidgets и QCustomPlots ).

Я хотел бы использовать функцию обработки одного щелчка и нажатия клавиш. Тем не менее, я изо всех сил пытаюсь получить виджет, на который на самом деле нажимают, чтобы я мог выполнять определенные действия в этом виджете.

Есть ли способ вернуть из a ClickEvent имя виджета, на который был нажат?

Комментарии:

1. Поскольку эти события доставляются определенным объектам, вы уже знаете, какой виджет их получает. Или я действительно не понимаю, какую проблему вы пытаетесь решить.

Ответ №1:

Вы можете реализовать eventFilter в своем MainWindow и прослушивать события из виджетов там :

 bool MainWindow::eventFilter(QObject * obj, QEvent * event)
{

    if((myWidget *)obj == widget1 amp;amp; event->type()==QEvent::KeyPress) 
    {

        int pressedKey = ((QKeyEvent*)event)->key();

        ...

    }
    else if((myWidget *)obj == widget2 amp;amp; event->type()==QEvent::MouseButtonRelease)
    {

        if(((QMouseEvent*)event)->button() == Qt::LeftButton)
        {
            ...
        }
    }

    return false;
}
  

Также не забудьте установить фильтры событий для ваших виджетов в конструкторе MainWindow :

 widget1->installEventFilter(this);
widget2->installEventFilter(this);