前言
解决Qt eventfilter过滤事件无法监听QTextEdit。
原因
QTextEdit是继承自QAbstractScollArea派生的,对于QAbstractScollArea,其过滤器要安装在viewport上。
//构造函数中
textEdit = new QTextEdit;
setCentralWidget(textEdit);
textEdit->installEventFilter(this);
//如果要监听QTextEdit 控件的鼠标事件,在
textEdit->viewPort->installEventFilter(this);
对于过滤事件
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == textEdit)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
qDebug() << "Ate key press" << keyEvent->key();
return true;
}
else
{
return false;
}
}
else if (obj == textEdit->viewPort())
{
// To do..... 监听鼠标事件
if (event->type() == QEvent::mouseMove)
{
return true;
}
}
else
{
// pass the event on to the parent class
return QMainWindow::eventFilter(obj, event);
}
}
参考网址:https://www.xuebuyuan.com/799565.html