自定义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

在PyQt,可以通过以下步骤获取`QTableWidget`双击单元格后失焦的单元格数据: 1. 连接单元格双击信号到相应的槽函数,槽函数可以在单元格失焦时被调用: ```python self.tableWidget.cellDoubleClicked.connect(self.get_cell_data) ``` 2. 在槽函数`get_cell_data`获取当前失焦的单元格的行号和列号: ```python def get_cell_data(self, row, column): self.current_row = row self.current_column = column ``` 3. 在单元格失焦后,通过行号和列号获取单元格数据: ```python def focusOutEvent(self, event): # 获取当前失焦的单元格的数据 item = self.tableWidget.item(self.current_row, self.current_column) cell_data = item.text() ``` 完整的代码示例: ```python from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QWidget from PyQt5.QtCore import Qt class MyTableWidget(QTableWidget): def __init__(self, rows, columns): super().__init__(rows, columns) self.current_row = None self.current_column = None self.init_ui() def init_ui(self): self.cellDoubleClicked.connect(self.get_cell_data) self.setEditTriggers(QTableWidget.NoEditTriggers) for i in range(self.rowCount()): for j in range(self.columnCount()): item = QTableWidgetItem(str(i) + str(j)) self.setItem(i, j, item) def get_cell_data(self, row, column): self.current_row = row self.current_column = column def focusOutEvent(self, event): if self.current_row is not None and self.current_column is not None: item = self.item(self.current_row, self.current_column) cell_data = item.text() print(cell_data) self.current_row = None self.current_column = None if __name__ == '__main__': app = QApplication([]) table = MyTableWidget(3, 3) table.show() app.exec() ``` 运行该程序,双击单元格后失焦,即可在控制台输出对应单元格的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wb175208

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

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

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

打赏作者

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

抵扣说明:

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

余额充值