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