使用场景:在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