当前位置: 移动技术网 > IT编程>开发语言>C/C++ > QT --- Qt实现tab键的自由切换【事件过滤实现】

QT --- Qt实现tab键的自由切换【事件过滤实现】

2020年07月29日  | 移动技术网IT编程  | 我要评论

背景:qt在ui界面是默认打开tab键切换的,并且可以通过UI界面界面调整tab切换控件的顺序,但我们在自己设计界面时,具体应用场景多是tab在某几个控件进行切换,那么如何实现呢?

这里通过为控件安装事件过滤器的方法进行实现。

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

    bool eventFilter(QObject *obj, QEvent *event);


private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

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

#include <QKeyEvent>
#include <QDialog>
//#include <QEvent>


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

    ui->lineEdit->installEventFilter(this);
    ui->lineEdit_2->installEventFilter(this);
}

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if(obj == ui->lineEdit || obj == ui->lineEdit_2)
    {
        if(event->type() == QEvent::KeyPress)
        {
            //将事件转化为键盘事件
            QKeyEvent *key_event = static_cast<QKeyEvent *>(event);

            //按下Tab键执行焦点切换事件
            if(key_event->key() == Qt::Key_Tab)
            {
                bool l1 = ui->lineEdit->hasFocus();
                bool l2 = ui->lineEdit_2->hasFocus();

                if(l1)
                {
                    focusNextChild();        //切换到下一个
                    ui->lineEdit->setFocusPolicy(Qt::StrongFocus);
                }
                else if(l2)
                {
                    focusPreviousChild();    //切换到上一个
                    ui->lineEdit_2->setFocusPolicy(Qt::StrongFocus);
                }
                return true;
                }
        }
//        return MainWindow::eventFilter(obj, event);
    }
}


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

QT的UI界面如下:

运行程序可以发现,tab键只会在我们设置的两个lineEdit控件间进行切换!

本文地址:https://blog.csdn.net/weixin_42445727/article/details/107645219

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网