【发布时间】:2018-06-27 10:00:02
【问题描述】:
我在尝试使用 QT eventFilter 传递事件时遇到问题。
bool MainWindow::eventFilter(QObject *obj, QEvent *event){
if(event->type() == QEvent::Wheel){
QPoint pos = QCursor::pos();
QWidget *widget = QApplication::widgetAt(pos);
if(widget != NULL){
widget->setVisible(false); //for Test purposes only
qDebug() << widget; //also for test
QApplication::sendEvent(widget, event); //should send event to widget?
return true;
}
return true;
}
return false;
}
我想捕捉鼠标滚轮的滚动并将其一次传递给多个 QWidget。如果我在没有 sendEvent 的情况下执行上述操作,我想参加的小部件将消失(这就是我想要的测试)。如果我使用 sendEvent,什么都不会发生,或者它会因分段错误错误而崩溃……我尝试了我在网上找到的任何东西(或者我至少是这么认为的)..
提前致谢!!!
【问题讨论】:
-
如果您将事件发送到小部件,您将最终陷入无限递归,因为事件过滤器会再次拦截它。如果您希望小部件接收事件,只需返回
false,如果您想停止事件传播,请返回true