Qt 将eventfilter添加到QLineEdit会更改其外观
我已经在我的Qt 将eventfilter添加到QLineEdit会更改其外观,qt,Qt,我已经在我的QLineEdit上安装了EventFilter,这样我就可以处理焦点事件,以便在获得焦点时显示QFileDialog 我添加了以下行: QLineEdit *projDir = new QLineEdit(); 再往下看,我有: projDir->installEventFilter(this) 这是我的职责: bool StartDialog::eventFilter(QObject *target, QEvent *event) { if(target ==
QLineEdit
上安装了EventFilter
,这样我就可以处理焦点事件,以便在获得焦点时显示QFileDialog
我添加了以下行:
QLineEdit *projDir = new QLineEdit();
再往下看,我有:
projDir->installEventFilter(this)
这是我的职责:
bool StartDialog::eventFilter(QObject *target, QEvent *event)
{
if(target == projDirEdit )
{
if (event->type() == QEvent::FocusIn)
{
qDebug()<<"yep";
}
else
event->ignore();
}
}
bool StartDialog::eventFilter(QObject*target,QEvent*event)
{
如果(目标==projDirEdit)
{
如果(事件->类型()==QEvent::FocusIn)
{
qDebug()对不起,我知道我做错了什么
在eventfilter中,我需要添加一个返回false和返回true。我不确定这是否正确,但它为我解决了问题:
bool StartDialog::eventFilter(QObject *target, QEvent *event)
{
if(target == projDirEdit )
{
if (event->type() == QEvent::FocusIn)
{
qDebug()<<"yep";
return true;
}
else
{
event->ignore();
return false;
}
}
}
bool StartDialog::eventFilter(QObject*target,QEvent*event)
{
如果(目标==projDirEdit)
{
如果(事件->类型()==QEvent::FocusIn)
{
qDebug()根据Qt文档,您答案中的返回真/假
语句是正确的:
在重新实现此函数时,如果要过滤掉事件,即停止进一步处理,则返回true;否则返回false
然而,有几点需要重新考虑:
- 代码包含的代码路径不包含
return
语句:如果目标不是projDirEdit,或者事件不是FocusIn,将返回什么?True?False
- 如果不关心事件,就不应该
ignore()
该事件,因为这可能意味着其他类将不再处理该事件
- 如果要筛选出多个事件,则对事件类型使用switch()可以更轻松地进行扩展
就我个人而言,我会这样实施:
bool StartDialog::eventFilter(QObject *target, QEvent *event)
{
if( target == projDirEdit )
{
switch( event->type() )
{
case QEvent::FocusIn:
case QEvent::FocusOut: // I added this as an example why I use switch()
event->ignore(); // not sure if this is necessary
return true;
default:
break;
};
}
// let the base class handle anything else
// (assuming QFileDialog is the base class)
return QFileDialog::eventFilter( target, event );
}