Qt处理焦点事件(获得焦点,失去焦点)

 更新时间:2023年12月15日 08:30:44   作者:大橘  
本文主要介绍了Qt处理焦点事件(获得焦点,失去焦点),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

背景:

我只是想处理焦点动作,由于懒,上网一搜,排名靠前的一位朋友,使用重写部件的方式实现。还是因为懒,所以感觉复杂了。于是又花了一分钟解决了一下。

所以记录下来,以免以后忘了。

思路:

事件过滤器是个好东西。

在vs里,从6.0到.net,为什么很多人评价说人家编程优雅,确实好用。代码自动格式化,各种事件特别全。

在qt里面转到槽,就简单的几个信号。大部分还是要靠事件过滤器细分。其实,qt内部已经准备了很多最基础的信号(事件),只是需要多这样一步。

插曲:之前跟同事聊,有些事实现起来不愿意多想,闲聊一句:qt能干这事不?也是随口一句回答:c++都不行还什么能行?这句随口一答,当时是我即兴发挥,没考虑负不负责任。但却成了后来qt之旅的信心来源。

言归正传。

先说一种场景,比如窗体上放一个文本框,我希望它永远是焦点,也就是说,只要焦点离开,就setfocus。不讨论实用性,只讨论方法。以前在js中就实现过。

所以,第一步要做的是先看QEvent帮助,确认里面支持。于是看到:enum QEvent::Type中有QEvent::FocusIn和QEvent::FocusOut,这就行了。我们只用到QEvent::FocusOut。

方法:

给文本框安装事件过滤器,窗体代码中重写eventFilter函数,并在其中判断event->type()。代码如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    bool eventFilter(QObject *watched, QEvent *event);
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

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

MainWindow::~MainWindow()
{
    delete ui;
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if (watched == ui->lineEdit && event->type() == QEvent::FocusOut)
    {
        ui->lineEdit->setFocus();
        return true;
    }
    return QWidget::eventFilter(watched, event);
}

然后直接运行看效果,始终是这个文本框获得焦点,无论鼠标点击别处,或者tab键切换焦点。

总结:

所以,核心思想还是充分理解事件过滤器,相当好用。

到此这篇关于Qt处理焦点事件(获得焦点,失去焦点)的文章就介绍到这了,更多相关Qt 焦点事件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++学习之初始化列表详解

    C++学习之初始化列表详解

    这篇文章主要为大家详细介绍了C++中初始化列表的相关知识,文中的示例代码讲解详细,对我们学习C++有一定的帮助,需要的小伙伴可以了解一下
    2023-03-03
  • C语言位段(位域)机制结构体的特殊实现及解析

    C语言位段(位域)机制结构体的特殊实现及解析

    这篇文章主要为大家介绍了C语言位段位域机制结构体的特殊实现讲解有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-02-02
  • C++ 简单的任务队列详解

    C++ 简单的任务队列详解

    下面小编就为大家带来一篇C++ 简单的任务队列详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C++线程安全的队列你了解嘛

    C++线程安全的队列你了解嘛

    这篇文章主要为大家详细介绍了C++线程安全的队列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • bmp 缩放代码(BMP位图任意放大 和缩小)

    bmp 缩放代码(BMP位图任意放大 和缩小)

    这篇文章主要介绍了bmp 缩放代码(BMP位图任意放大 和缩小),需要的朋友可以参考下
    2016-04-04
  • C++实现归并排序

    C++实现归并排序

    这篇文章主要为大家详细介绍了C++实现归并排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C++中头文件的概念与基本编写方法

    C++中头文件的概念与基本编写方法

    这篇文章主要介绍了C++中头文件的概念与基本编写方法,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-12-12
  • C++设计模式之状态模式

    C++设计模式之状态模式

    这篇文章主要介绍了C++设计模式之状态模式,本文讲解了什么是状态模式、状态模式的使用场合、状态模式的实现代码等内容,需要的朋友可以参考下
    2014-10-10
  • C++中的形参和实参区别解析

    C++中的形参和实参区别解析

    这篇文章主要介绍了C++中的形参和实参区别解析,本文将从定义、特性、传递方式等多个维度深入解析,帮你彻底掌握这对重要概念,需要的朋友可以参考下
    2025-09-09
  • C++中使用FFmpeg适配自定义编码器的实现方法

    C++中使用FFmpeg适配自定义编码器的实现方法

    本文介绍了在C++中使用FFmpeg库进行自定义编码器适配的实现方法。文章通过具体的代码示例,介绍了FFmpeg的基本使用方法和自定义编码器的实现过程,帮助读者了解如何在C++中进行音视频编码和解码的开发工作,并能够实现自定义的编码器适配
    2023-04-04

最新评论