1.出现的问题
在使用QListWidget的时候,有这样的业务逻辑。用户切换节点后,需要判断一些条件决定是否真正跳转至下个节点,那么怎么拦截这个事件就是本次文档的主要内容。
2.解决办法
使用eventfilter,在QListWidget的上级控件中,安装事件监听器。
ui->listWidget->viewport()->installEventFilter(this); 注意是listWidget->viewport(),而不是listWidget
在上级控件中继承eventfiler方法拦截事件信息,如下代码
bool XXXXX::eventFilter(QObject* watched, QEvent* event) { if (watched == ui->listWidget->viewport()) { qDebug() << event->type(); if (event->type() == QEvent::MouseButtonPress && m_bIsChanged) { MessageDialog::dialogShow(MessageDialog::Check, tr("Warning"), tr("Please save the current group first")); event->ignore(); return true; } } return QWidget::eventFilter(watched, event); }
来源:https://www.cnblogs.com/wanglii/p/12419925.html