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