QTabwidget、QTreeWidget、QTreeView、QTableView、QListWidget、QListView、QGraphicsView不能直接给该窗体installEventFilter
,而是该窗体的viewport
添加事件过滤。通常情况下继承于QAbstractScrollArea
的对象,都需要给viewport
添加事件过滤器才会生效。
例子:
//构造函数添加:
ui->tableWidget->viewport()->installEventFilter(this);// 过滤QTabwidget的鼠标双击事件,使得某一列不响应双击事件;
//事件过滤
bool XXX::eventFilter(QObject *obj, QEvent *event)
{
if(obj == ui->tableWidget->viewport())// 过滤QTabwidget的鼠标双击事件,使得第一列不响应双击事件;
{
if(event->type() == QEvent::MouseButtonDblClick)
{
QMouseEvent *mouseEvent = (QMouseEvent*)event;
int col = ui->tableWidget->columnAt(mouseEvent->pos().x());
if(col == 0)
return true;
return false;
}
}
return QObject::eventFilter(obj,event);
}
总结:太坑了哈哈,研究了半天。