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);
}