QT中lineEdit和textEdit通过enter按键发送数据的操作方法

在调节电机PID控制参数过程中需要通过enter按键发送lineEdit和textEdit中的内容。这里介绍一种如何通过enter按键发送lineEdit和textEdit的数据,同样也可以通过按键发送。

lineEdit有自带的 returnPressed()消息,textEdit使用事件过滤器的方法。在textEdit对象上安装事件过滤器,调用对象的installEventFilter(QObject *)方法来安装事件过滤器,设置完后自动调用其eventFilter函数。

 

在ui界面放置一个lineEdit,两个textEdit,一个用于发送,一个用于接收。

光标放到lineEdit中,按下enter按键,可以将lineEdit中内容复制到接收框中,按下按键1同样也可以实现将lineEdit中内容复制到接收框中。

光标放到textEdit_send中,按下enter按键,可以将textEdit_send中内容复制到接收框中,按下按键2同样也可以实现将textEdit_send中内容复制到接收框中。

 

 

 mainwindow.h  文件如下

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;


public slots:
    void pushButton_1_clicked_slot_fun();
    void pushButton_2_clicked_slot_fun();

    void lineEdit_returnPressed_slot_fun()  ;

protected :
    bool eventFilter(QObject *target, QEvent *event);//事件过滤器

};
#endif // MAINWINDOW_H

mainwindow.cpp文件如下

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QEvent>
#include <QKeyEvent>
#include <iostream>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);


   connect(ui->pushButton_1,SIGNAL(clicked()),this,SLOT(pushButton_1_clicked_slot_fun()));
   connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(pushButton_2_clicked_slot_fun()));



   connect(ui->lineEdit, SIGNAL(returnPressed()),this, SLOT(lineEdit_returnPressed_slot_fun()));  //自带的按下enter键后的信号

   ui->textEdit_send->installEventFilter(this);//在对象上安装事件过滤器,调用对象的installEventFilter(QObject *)方法来安装事件过滤器,
                                               //设置完后自动调用其eventFilter函数

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow :: pushButton_1_clicked_slot_fun()
{
    QString str = ui->lineEdit->text();
    ui->textEdit_rec->append(str);
    ui->textEdit_rec->append("按键1");
}


void MainWindow :: pushButton_2_clicked_slot_fun()
{
    QString str = ui->textEdit_send->toPlainText();

    ui->textEdit_rec->append(str);
    ui->textEdit_rec->append("按键2");
}



void MainWindow :: lineEdit_returnPressed_slot_fun()
{
    QString str = ui->lineEdit->text();

    qDebug()<<"Enter clicked";

    ui->textEdit_rec->append(str);


}


bool MainWindow::eventFilter(QObject *target, QEvent *event)
 {
     if(target == ui->textEdit_send)
     {
         if(event->type() == QEvent::KeyPress)//按键按下
         {
              QKeyEvent *k = static_cast < QKeyEvent*>(event);
              if(k->key() == Qt::Key_Return   || k->key() == Qt::Key_Enter )
              {
                  qDebug()<<"eventFilter Enter clicked";
                  pushButton_2_clicked_slot_fun();
                  return true;
              }
         }
     }



     return QWidget::eventFilter(target,event);
}
实现结果如图所示:

 

posted @ 2022-09-28 12:03  zp123  阅读(1365)  评论(0编辑  收藏  举报