欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-19 11:27:49
背景:qt在ui界面是默认打开tab键切换的,并且可以通过UI界面界面调整tab切换控件的顺序,但我们在自己设计界面时,具体应用场景多是tab在某几个控件进行切换,那么如何实现呢?这里通过为控件安装事件过滤器的方法进行实现。mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include QT_BEGIN_NAMESPACEnamespace Ui { class MainWindow;...

背景: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界面如下:

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

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

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

相关标签: QT