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);
}
实现结果如图所示: