功能
环境: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