Qt:不使用无限递归将事件传输到子小部件

Qt:不使用无限递归将事件传输到子小部件,qt,events,widget,Qt,Events,Widget,我想将事件传输到一个小部件的子部件。 我当前的实现是(其中\u table是QTableWidget*我的widget的数据成员) void MyWidget::mousePressEvent(QMouseEvent*event) { QHeaderView*headerview=_table->horizontalHeader(); QPoint headerpoint=headerview->mapFromGlobal(事件->globalPos()); const int index=

我想将事件传输到一个小部件的子部件。 我当前的实现是(其中
\u table
QTableWidget*
我的widget的数据成员)

void MyWidget::mousePressEvent(QMouseEvent*event)
{  
QHeaderView*headerview=_table->horizontalHeader();
QPoint headerpoint=headerview->mapFromGlobal(事件->globalPos());
const int index=headerview->logicalIndex(headerpoint);
如果((索引>=0)和&(索引count()){
QApplication::postEvent(headerview,新的QMouseEvent(QEvent::MouseButtonPress,headerpoint,事件->按钮(),事件->按钮(),Qt::NoModifier));
}
QWidget::MousePresseEvent(事件);
}  
问题是这个实现似乎产生了一个无限循环或递归

什么是正确的实现


非常感谢。

我相信您希望确保将
事件
标记为
已接受
,即:

event->setAccepted(true)

事件->接受()

其他根据文档“设置accept参数表示事件接收器想要该事件。不需要的事件可能会传播到父窗口小部件。”

void MyWidget::mousePressEvent(QMouseEvent *event)  
{  
    QHeaderView *headerview = _table->horizontalHeader();
    QPoint headerpoint = headerview->mapFromGlobal(event->globalPos());
    const int index = headerview->logicalIndexAt(headerpoint);
    if ((index >= 0) && (index < headerview->count())) {
        QApplication::postEvent(headerview, new QMouseEvent(QEvent::MouseButtonPress, headerpoint, event->button(), event->buttons(), Qt::NoModifier));
    }
    QWidget::mousePressEvent(event);  
}