• 10965阅读
  • 5回复

如何实现在TextEdit输完内容按enter发出一个信号 [复制链接]

上一主题 下一主题
离线cdutherbert
 
只看楼主 倒序阅读 楼主  发表于: 2009-11-24
     一个类用了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时,没有反映。请问是什么原因。
离线yb824
只看该作者 1楼 发表于: 2009-11-24
Qt::Key_Enter ----------------------- 小键盘上回车键
Qt::key_Return------------------------主键盘上回车键
离线dbzhang800

只看该作者 2楼 发表于: 2009-11-24
我说一下自己的看法
1. 不清楚楼主需要实现什么,开头的描述因果关系也不成立。
    子类化QTextEdit可以直接用qdesigner,而且相当方便。
  
2. 楼主后面的代码也不完整,看不出来是中定义的事件过滤器类,和安装事件过滤器的对象的关系
    这儿我想不通的是,前面楼主提到不子类化QTextEdit是由于 designer 的关系,哪这儿你创建的类又怎么用的呢?
[ 此帖被dbzhang800在2009-11-24 21:03重新编辑 ]
离线cdutherbert
只看该作者 3楼 发表于: 2009-11-24
我没有使用过用designer来用子类化的东西。主要是现在这个东西要急着上交。所以想使用eventFilter来发出一个信号。就是在inTextEdit中输入完内容后发出这个信号。以使得我能触发自己建立的槽。这就是实现QQ中按一个enter来发送输入的内容。那个inTextEdit就是QQ上的输入框。能怎么解决?谢谢。
离线dbzhang800

只看该作者 4楼 发表于: 2009-11-24
可以试试
子类化  QTextEdit, 重载其 keyPressEvent, 然后用 提升法 配合designer使用
离线cdutherbert
只看该作者 5楼 发表于: 2009-11-25
谢谢。我通过eventFilter然后使用
Qt::Key_Enter ----------------------- 小键盘上回车键
Qt::key_Return------------------------主键盘上回车键
实现了。谢谢
快速回复
限100 字节
 
上一个 下一个