一个类用了UI文件中的一个TextEdit,想让他何实现在TextEdit输完内容按enter发出一个信号。
因为,使用UI文件可以方便的布局,所以我不想通过继承QTextEdit类来实现在TextEdit中输入完内容按ENTER 来发送一个信号。
我看到可以使用一下方法来实现:
class KeyPressEater : public QObject
{
Q_OBJECT
...
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
bool KeyPressEater::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
qDebug("Ate key press %d", keyEvent->key());
return true;
} else {
// standard event processing
return QObject::eventFilter(obj, event);
}
}
=========================以下是我的代码=============
bool ChatClient::eventFilter(QObject *obj, QEvent *event)
{
if(obj == inTextEdit)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast <QKeyEvent *>(event);
if(keyEvent->key()==Qt::Key_Enter)
{
qDebug()<<"int envent filter";
emit textEnterPressed();
return true;
}
}
}
return QObject::eventFilter(obj, event);
}
。。。。。。。。。。。。。。。。。。
然后也安装了监听
inTextEdit->installEventFilter(this);
我也试了,但是在textEdit输入完内容按ENTER时,没有反映。请问是什么原因。