Qt实现双击可编辑的QLabel,输入文本后回车确定

功能

环境:VS2013 + Qt5.8
在一个QLabel标签上,双击,对文本进行编辑,按下回车或者Esc,退出编辑状态,或者任意点击其他地方,退出Focus,退出编辑状态
Demo下载:https://download.csdn.net/download/birenxiaofeigg/12106229

代码实现

思路:通过stackedWidget,安装installFilter(),进行事件判断。

	myLabelEdit::myLabelEdit(QWidget *parent)
	: QMainWindow(parent)
	{
	ui.setupUi(this);
	ui.label->setStyleSheet("background:yellow");
	ui.label->installEventFilter(this);
	ui.lineEdit->installEventFilter(this);
	}

事件处理:

bool myLabelEdit::eventFilter(QObject* obj, QEvent* evt)
{
	if (obj == ui.label)
	{
		if (evt->type() == QEvent::MouseButtonDblClick)
		{
			ui.lineEdit->setText(ui.label->text());
			ui.stackedWidget->setCurrentIndex(1);
		}
	}
	else if (obj == ui.lineEdit)
	{
		if (evt->type() == QEvent::KeyPress)
		{
			QKeyEvent* keyevt = static_cast<QKeyEvent*>(evt);
			if ((keyevt->key() == Qt::Key_Return) || 
				(keyevt->key() == Qt::Key_Escape) || 
				(keyevt->key() == Qt::Key_Enter))   // Qt::Key_Return是大键盘的回车键 Qt::Key_Enter是小键盘的回车键
			{
				ui.label->setText(ui.lineEdit->text());
				ui.stackedWidget->setCurrentIndex(0);
			}
		}
		else if (evt->type() == QEvent::FocusOut)
		{
			ui.label->setText(ui.lineEdit->text());
			ui.stackedWidget->setCurrentIndex(0);
		}
	}

	return QMainWindow::eventFilter(obj, evt);
}

Demo下载:https://download.csdn.net/download/birenxiaofeigg/12106229

发布了56 篇原创文章 · 获赞 10 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/birenxiaofeigg/article/details/104000987