• 7519阅读
  • 2回复

QTextEdit设置组合键 [复制链接]

上一主题 下一主题
离线ltx352135591
 

只看楼主 倒序阅读 楼主  发表于: 2013-04-15
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2014-03-26) —
Enter发送信息,Ctrl+Enter换行
在现在的即时聊天程序中,一般都设置有快捷键来实现一些常用的功能,类似QQ可以用CTRL+Enter来实现信息的发送。

QT4中,所有的事件继承与QEvent这个类,以下是用QEvent来实现快捷键的功能。

首先所有QT类的基类QObject有一个成员函数installEventFilter,这个函数是用来将一个事件处理器和该QObject绑定起来,所以就有了我下面的想法。

首先在chat类定义一个eventFilter,该函数是一个虚函数,可以由子类进行更改。所以声明eventFilter如下:

    virtual bool eventFilter(QObject *obj, QEvent *e);

所以可以重写eventFilter函数来实现快捷键的功能,可以根据QKeyEvent的key和modifire来分别是Enter还是Ctrl+enter被按下。

重写eventFilter的函数如下:

bool MsgPanel::eventFilter( QObject *obj, QEvent *e )
{
    Q_ASSERT(obj == m_editMsg);

    if (e->type() == QEvent::KeyPress)

    {
        QKeyEvent *event = static_cast<QKeyEvent*>(e);

        if (event->key() == Qt::Key_Return && (event->modifiers() & Qt::ControlModifier))
        {
            m_editMsg->append("");

            return true;

        }
        else if (event->key() == Qt::Key_S && (event->modifiers() & Qt::AltModifier))

        {

            OnSendMsg();

            return true;

        }
        else if (event->key() == Qt::Key_Return)
        {
            OnSendMsg();

            return true;
        }

    }

    return false;
}


然后把这个过滤器用installEventFilter函数安装在聊天窗口的输入框上(QTextEdit),这样就实现快捷键的功能了。
离线x_greatwall

只看该作者 1楼 发表于: 2014-03-24
离线自强不吸

只看该作者 2楼 发表于: 2014-05-06
good
自强不吸!
快速回复
限100 字节
 
上一个 下一个