1、问题描述
基于C++的QT中,QTextEdit回车后如何切换下一个文本框
2、已尝试:
(1)现在使用QTextLine的方法,只修改控件(不可行)
//将textEdit_3/4/5修改为textLine_3/4/5可用
void Dialog3::keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) {
if(ui->textEdit_3->hasFocus()) {//1转2
event->ignore();
ui->textEdit_4->setFocus();
ui->textEdit_4->selectAll();
} else if(ui->textEdit_4->hasFocus()) {//2转3
event->ignore();
ui->textEdit_5->setFocus();
ui->textEdit_5->selectAll();
} else if(ui->textEdit_5->hasFocus()) {//3转1
event->ignore();
SNCompare();
ui->textEdit_3->setFocus();
ui->textEdit_3->selectAll();
}
}
}
(2)参考Freedom_Bule先生回车发送消息的方法(不可行,可能是我思路错了,有反应过来请T我一脚,谢谢)
原文
//头文件
protected:
bool eventFilter(QObject *target, QEvent *event);//事件过滤器
//cpp文件
Dialog3::Dialog3(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog3)
{
ui->setupUi(this);
//添加最大化,最小化按钮
setWindowFlags(windowFlags() | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint);
ui->textEdit_3->setFocus();//给SN1设置焦点
ui->textEdit_4->setFocus();//给SN2设置焦点
ui->textEdit_5->setFocus();//给SN3设置焦点
ui->textEdit->installEventFilter(this);//设置完后自动调用其eventFilter函数
}
//实现事件过滤器
bool Dialog3::eventFilter(QObject *target, QEvent *event)
{
if(target == ui->textEdit_3)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *k = static_cast<QKeyEvent *>(event);
if(k->key() == Qt::Key_Return)
{
ui->textEdit_4->setFocus();
return true;
}
}
}else if(target == ui->textEdit_4)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *k = static_cast<QKeyEvent *>(event);
if(k->key() == Qt::Key_Return)
{
ui->textEdit_5->setFocus();
return true;
}
}
}else if(target == ui->textEdit_5)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *k = static_cast<QKeyEvent *>(event);
if(k->key() == Qt::Key_Return)
{
ui->textEdit_3->setFocus();
return true;
}
}
}
return QWidget::eventFilter(target, event);
}
以上,请求救我狗命,谢谢