文档章节

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

koomee
 koomee
发布于 2016/07/07 13:44
字数 659
阅读 1273
收藏 1

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;

运行如图:

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

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

virtual void  focusInEvent(QFocusEvent *event);

virtual void focusOutEvent(QFocusEvent *event) ;

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

将函数 void

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

然后运行:

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

this->clearFocus();

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

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

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

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

 

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

© 著作权归作者所有

koomee
粉丝 0
博文 2
码字总数 951
作品 0
贵阳
私信 提问
QT5.2.1 QTextedit setfocus导致movecursor无响应问题

大家好,问个问题。 我自定义了个label然后把ui上一个textedit指针传进去想控制界面上的内容显示,现在发现当使用setfocus把焦点设置在textedit后,无法通过movecursor把光标移到文本尾部,请...

zb_ramble
2014/07/04
474
0
kityMinder 1.1.2 发布,在线脑图编辑器

KityMinder 更新日志 v1.1.2 功能更新 支持本地格式文件导入 支持文件拖拽和网盘文件导入 格式支持 xmind/freemind/mindmanager,其他格式暂不支持 新增节点移动到视野中 当前文件名加到 Ti...

战毅
2014/04/18
2.2K
2
LCUI 1.1.0 Beta 发布,C 的图形界面库

LCUI 是一个图形界面开发库,主要使用 C 语言编写,可借助 CSS 和 XML 来构建简单的桌面应用程序。 本次的更新,针对渲染含有上万部件的界面做了一些优化,解决界面长时间未响应和内存占用过...

司徒永超
03/11
0
0
EditText设置/隐藏光标位置、选中文本和获取/清除焦点

有时候需要让光标显示在EditText的指定位置或者选中某些文本。同样,为了方便用户输入以提升用户体验,可能需要使EditText获得或失去焦点。 1. 设置光标到指定位置 PS:当内容过多时,可通过...

SamZel
2012/11/09
0
0
如何让输入框重新获得焦点?

我要实现一个验证输入的功能,当输入中为空,失去焦点时弹出对话框提示“input cannot be empty”,点击确定之后输入框重新获得焦点,光标在输入框内。 前面的我解决了,最后重新获得焦点,光...

alvy
2015/09/05
896
3

没有更多内容

加载失败,请刷新页面

加载更多

fabric-sdk-java 1.4安装说明

Hyperledger Fabric Java SDK是开发基于Hyperledger Fabric区块链的Java应用之必备开发包。本文将介绍如何在Maven、Gradle和Eclipse中安装使用最新1.4版本的Hyperledger Fabric Java SDK。 ...

汇智网教程
25分钟前
0
0
Linux基础优化与安全归纳总结

一名运维工程师在运维岗位上时间久了,就会发现Linux优化的重要性,同时会给运维工作带来很多的便利性。本人逐渐认识到了这一点,所以特意在工作闲暇之余,通过阅读Linux相关书籍及向同事、同...

xiangyunyan
26分钟前
2
0
要996还是要生活?

今天早上,嗅嗅还在被窝的时候,睁开朦胧的双眼,习惯性的打开手机,一行小字映入眼帘:要996还是要生活 当真是垂死病中惊坐起,嗅嗅瞬间就清醒过来了。 其实嗅嗅当时的内心活动是:别闹了,...

forespider
26分钟前
4
0
SpringCloud微服务构建

遇到问题 修改server.port后,端口变更不起作用,总是8080 src/java/resources应该和rc/java/java在同一个层级,否则boot读取不到配置信息

铲平王
27分钟前
2
0
[IntelliJ IDEA][maven]properties in parent definition are prohibited报错

<parent> ... <version>${platform.version}</version><parent> IntelliJ报错: properties in parent definition are prohibited 解决: idea的错误提示,不用管 或者升级到maven3.5.......

Danni3
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部