我是靠谱客的博主 老迟到眼神,最近开发中收集的这篇文章主要介绍QT QTextEdit 控件响应回车键,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、运行环境

  • QT 版本:QT 5.12.9
  • 开发平台:windows

二、需求

在主窗口里有个QTextEdit 控件 ,用户可以在QTextEdit 上面编辑内容。现在要实现的功能是:编辑完内容之后,用户按Enter 键,将QTextEdit 上的内容发送出去。

三、需求分析

首先需要捕抓到这个键盘事件,然后再区分不同的按键,响应不同的处理。这里介绍通过QTextEdit 控件捕抓 按键的处理方法。在QTextEdit 的头文件中,定义了很多与按键相关的方法:

    virtual bool event(QEvent *e) override;
    virtual void timerEvent(QTimerEvent *e) override;
    virtual void keyPressEvent(QKeyEvent *e) override;
    virtual void keyReleaseEvent(QKeyEvent *e) override;
    virtual void resizeEvent(QResizeEvent *e) override;
    virtual void paintEvent(QPaintEvent *e) override;
    virtual void mousePressEvent(QMouseEvent *e) override;
    virtual void mouseMoveEvent(QMouseEvent *e) override;
    virtual void mouseReleaseEvent(QMouseEvent *e) override;
    virtual void mouseDoubleClickEvent(QMouseEvent *e) override;
    virtual bool focusNextPrevChild(bool next) override;

这里,我们需要实现的是KeyReleaseEvent 方法,这样我们的就可以捕抓键盘事件。

四、实现步骤

  1. 重新定义一个继承QTextEdit 的新类UiSendEditText,在UiSendEditText 实现 KeyReleaseEvent 函数,这个函数实现事件捕抓。
  2. 新类UiSendEditText 定义一个新的接口方法,用来注册事件的处理函数。
  3. 在KeyReleaseEvent 函数里,调用2 中注册的事件处理函数,对特定事件进行处理。
  4. 在主窗口用新类UiSendEditText 代替 QTextEdit 。

五、实现代码

1. 头文件

#include <QObject>
#include <QWidget>
#include <QTextEdit>
#include <QMainWindow>


class UiSendEditText : public QTextEdit
{
public:
    UiSendEditText();
    void register_key_enter_handler(QMainWindow* pWindow);

protected:
    void keyReleaseEvent(QKeyEvent *e) override;
    QMainWindow * pWindow;

};

2. 源文件

#include <QDebug>
#include <QKeyEvent>
#include <QEvent>
#include "mainwindow.h"

UiSendEditText::UiSendEditText()
{
    this ->pWindow = NULL;
}

void UiSendEditText::register_key_enter_handler(QMainWindow* pWindow)
{

    this->pWindow = pWindow;
}

void UiSendEditText::keyReleaseEvent(QKeyEvent* e)
{
    MainWindow* pMainWind = NULL;
    if ( e->key() == Qt::Key_Return)
    {
        if (this->pWindow)
        {
            pMainWind = (MainWindow*)pWindow;
            pMainWind ->sendPushButtonClick();
        }
    }
}


3. 主窗口 实例化对象并注册处理函数

 textEdit = new UiSendEditText();
 textEdit->register_key_enter_handler(this);

最后

以上就是老迟到眼神为你收集整理的QT QTextEdit 控件响应回车键的全部内容,希望文章能够帮你解决QT QTextEdit 控件响应回车键所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部