QT LineEdit和TextEdit 添加获得焦点和失去焦点,以及双光标闪烁问题

QT LineEdit和TextEdit 在信号里没有获得焦点和失去焦点的信号,这使得在编程时想要在失去焦点时有相应的处理动作成为一个难点。解决办法就是自己继承相应的QT LineEdit和TextEdit 类添加信号,同时重写对应得两个函数:

virtual void  focusInEvent(QFocusEvent *event);

virtual void focusOutEvent(QFocusEvent *event) ;

在QT LineEdit和TextEdit 的类里这两个函数是虚函数,所以重写这两个函数属于覆盖。关于函数的重载,覆盖,隐藏等请参照:http://blog.csdn.net/xingyu19871124/article/details/7640131

  这里说一下我的应用:我使用QT的 QTextEdit 想在他失去焦点后将字符串值传给一个lable。

但是下编程时发现,QT 的QTextEdit 没有这个失去焦点的信号。自然就不能关联槽函数。于是就打算自己写一个TextEdit 继承QTextEdit,添加失去焦点的信号。

头文件

#ifndef MYTEXTEDIT_H
#define MYTEXTEDIT_H

#include <QTextEdit>

class MyTextEdit : public QTextEdit
{
   Q_OBJECT
public:
    explicit MyTextEdit(QWidget *parent = 0);
    void focusInEvent(QFocusEvent *event);    //覆盖这两个函数
    void focusOutEvent(QFocusEvent *event);  
public slots:
    void Slot_GetFocus();
    void Slot_LostFocus(QString*);
signals:
   void GetFocus();                   //获得焦点信号
   void LostFocus(QString* );         //失去焦点信号
private:

};

#endif // MYTEXTEDIT_H

实现cpp:

#include "MyTextEdit.h"

MyTextEdit::MyTextEdit(QWidget *parent) : QTextEdit(parent)
{
    this->setFocusPolicy(Qt::StrongFocus);
    //resize(parent->width(),parent->height());
}

void MyTextEdit::focusInEvent(QFocusEvent *event)
{
    
    emit Slot_GetFocus();
    
}
void MyTextEdit::focusOutEvent(QFocusEvent *event)
{
  
  emit Slot_LostFocus(this->toPlainText());
}

void MyTextEdit::Slot_GetFocus()
{
  

}

void MyTextEdit::Slot_LostFocus(QString*)
{


}

然后在Mainwindows中定义了两个MyTextEdit对象

MyTextEdit* mp_TextEdit;    
MyTextEdit* mp_TextEdit2;

运行如图:

132756_EVCE_2828587.png

发现 点击的时候光标不见了,在网上找了很多相关的文章看都没能解决。后面就在帮助文档中看到了关于:

focusInEvent(QFocusEvent *event)  的介绍。然后我就在想既然我继承QTextEdit类,有光标,并且这个光标是在获得焦点后出现的,那么QTextEdit坑定在获得焦点后有处理,于是跟踪到QTextEdit类的头文件中,看到自由两个虚函数:

virtual void  focusInEvent(QFocusEvent *event);

virtual void focusOutEvent(QFocusEvent *event) ;

具体实现不可见。 不可见就不可见吧!那我就直接调用吧!

将函数 void

MyTextEdit::focusInEvent(QFocusEvent *event);更改如下:

133629_Nd82_2828587.png

然后运行:

133751_9myb_2828587.png

光标是出来了,但是两个框都有光标在闪烁。百度一下说:要在失去焦点时清除焦点

this->clearFocus();

试了没用。同时灵光一闪。

MyTextEdit::focusInEvent(QFocusEvent *event)调用了父类的,为何

MyTextEdit::focusOutEvent(QFocusEvent *event)不能调用呢?

134144_jCay_2828587.png

然后运行,哈哈 完美解决。希望给予大家启发。

 

基于环境:win10 +QT5.6 +mingw49_32.

转载于:https://my.oschina.net/koomee/blog/707711

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值