自定义QLineEdit在失去焦点的时候,获取编辑框中的内容

使用场景:在QTreeWidget或者QTableWidget中编辑完成一个item之后需要立即响应处理,也就是在item编辑之后,失去焦点之后完成处理,需要获取编辑框的失去焦点事件。

#pragma once

#include <QLineEdit>
#include <QString>

//QTableWidget或者QTreeWidget中item的编辑框

class ILineEditFocus;

class LineEditItem : public QLineEdit {
	Q_OBJECT

public:
	LineEditItem();
	~LineEditItem();

	void setFocusInterface(ILineEditFocus* focus);

	void focusInEvent(QFocusEvent *e)override;
	void focusOutEvent(QFocusEvent *e)override;

private slots:
	void slotEnterPreess();

private:
	QString _text;
	ILineEditFocus* _focus = nullptr;
};

#include "LineEditItem.h"
#include "CommonWidget\LineEditItem\ILineEditFocus.h"

LineEditItem::LineEditItem() {
	connect(this, SIGNAL(returnPressed()), this, SLOT(slotEnterPreess()));
}

LineEditItem::~LineEditItem() {
}

void LineEditItem::setFocusInterface(ILineEditFocus* focus) {
	_focus = focus;
}

void LineEditItem::focusInEvent(QFocusEvent *e) {
	QLineEdit::focusInEvent(e);
	setStyleSheet("background-color:rgba(255,255,255,255); border:1px");
	_text = text();
	_focus->getFocus(_text);
}

void LineEditItem::focusOutEvent(QFocusEvent *e) {
	QLineEdit::focusOutEvent(e);
	setStyleSheet("background-color:rgba(255,255,255,0); border:none");
	_text = text();
	_focus->lostFocus(_text);
}

void LineEditItem::slotEnterPreess() {
	QLineEdit::clearFocus();
}

回调接口

#pragma once
#include "../commonwidget_global.h"

#include <QString>
//编辑框焦点失去和得到的时候接口

class ILineEditFocus {
public:
	ILineEditFocus();
	~ILineEditFocus();

	virtual void getFocus(QString text);
	virtual void lostFocus(QString text);
};
#include "CommonWidget\LineEditItem\ILineEditFocus.h"

ILineEditFocus::ILineEditFocus() {
}

ILineEditFocus::~ILineEditFocus() {
}

void ILineEditFocus::getFocus(QString text) {

}

void ILineEditFocus::lostFocus(QString text) {

}

封装类

#pragma once
#include "../commonwidget_global.h"

//编辑框

class LineEditItem;
class ILineEditFocus;
class QWidget;

class COMMONWIDGET_EXPORT LineEdit {
public:
	LineEdit(ILineEditFocus* ilef);
	~LineEdit();

	QWidget* getLineEdit();
private:
	LineEditItem* _lineEditItem = nullptr;
};


#include "CommonWidget\LineEditItem\LineEdit.h"
#include "LineEditItem.h"
#include "CommonWidget\LineEditItem\ILineEditFocus.h"

LineEdit::LineEdit(ILineEditFocus* ilef) {
	_lineEditItem = new LineEditItem;
	_lineEditItem->setFocusInterface(ilef);
}

LineEdit::~LineEdit() {

}

QWidget* LineEdit::getLineEdit() {
	return _lineEditItem;
}

aaa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值