南北任逍遥 2024-04-01 10:52 采纳率: 33.3%
浏览 16
已结题

基于C++的QT中,QTextEdit回车后如何切换下一个文本框

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);
}

以上,请求救我狗命,谢谢

  • 写回答

5条回答 默认 最新

  • 南北任逍遥 2024-04-01 13:34
    关注

    问题已解决,确实是事件过滤器的问题,重写过滤器即可

    Dialog3::Dialog3(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Dialog3)
    {
        ui->setupUi(this);
        //添加最大化,最小化按钮
        setWindowFlags(windowFlags() | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint);
    
        // 安装事件过滤器
        ui->textEdit_3->installEventFilter(this);
        ui->textEdit_4->installEventFilter(this);
        ui->textEdit_5->installEventFilter(this);
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月9日
  • 已采纳回答 4月1日
  • 创建了问题 4月1日

悬赏问题

  • ¥20 遥感植被物候指数空间分布图制作
  • ¥15 安装了xlrd库但是import不了…
  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker
  • ¥15 数学建模大赛交通流量控制
  • ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
  • ¥50 paddleocr最下面一行似乎无法识别
  • ¥15 求某类社交网络数据集
  • ¥15 靶向捕获探针方法/参考文献
  • ¥15 很抱歉出现错误word不能启动(24),如何解决?