Qt中如何设置textedit控件按下enter就把消息发出去?

这里写图片描述
如图效果:
上面是一个textBrowser控件,用来显示我发的东西
下面是一个textedit控件,用来发东西

所以,这里实现的是在textedit里面输入文字,按下enter之后,文字到上面去了,当然也可以单击“发送”

ui界面如图:
这里写图片描述

代码如下
widget.h中

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
protected:
    bool eventFilter(QObject *target, QEvent *event);//事件过滤器

private slots:
    void on_send_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QKeyEvent>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->textEdit->setFocusPolicy(Qt::StrongFocus);
    ui->textBrowser->setFocusPolicy(Qt::NoFocus);

    ui->textEdit->setFocus();
    ui->textEdit->installEventFilter(this);//设置完后自动调用其eventFilter函数

}

Widget::~Widget()
{
    delete ui;
}
bool Widget::eventFilter(QObject *target, QEvent *event)
{
    if(target == ui->textEdit)
    {
        if(event->type() == QEvent::KeyPress)//回车键
        {
             QKeyEvent *k = static_cast<QKeyEvent *>(event);
             if(k->key() == Qt::Key_Return)
             {
                 on_send_clicked();
                 return true;
             }
        }
    }
    return QWidget::eventFilter(target,event);
}

void Widget::on_send_clicked()
{
    QString msg = ui->textEdit->toHtml();
    ui->textEdit->clear();
    ui->textEdit->setFocus();
    ui->textBrowser->append(msg);

}

猜你喜欢

转载自blog.csdn.net/qiqi123i/article/details/80216528