今天来为大家分享一个小功能,首先看实现的效果吧~
功能讲解:
QLineEdit控件进行文本编辑,点击保存按钮后,隐藏编辑框和保存按钮,仅展示编辑内容,当鼠标点击空白处时,同样隐藏编辑框、隐藏保存按钮,但不存储编辑文本
如果你要需要实现这样的功能,就继续往下看吧~
1.控件
三个控件:QLineEdit编辑框、QPushButton按钮、QLabel纯文本展示。
默认QLabel控件是隐藏状态,只有点击保存按钮以及失去焦点后才会展示。
2.响应消息
此时需要响应两个消息。
消息1:点击保存按钮
connect(ui.btnSave, &QPushButton::clicked, this, &QMyWidget::OnBnClickedSave);
消息2:QLineEdit控件失去焦点后操作
对于控件来说,失去焦点的一般是focusOut消息,在QLineEdit这个类中,该消息是受保护的,那么如果要获取控件是如何失去焦点的,只能继承QLineEdit类,将失去焦点的消息,发送给调用者。
.h声明
class CustomLineEdit : public QLineEdit { Q_OBJECT public: CustomLineEdit(QWidget *parent); ~CustomLineEdit(); signals: void Msg_SendCustomLineEditFocusOut(); //失去焦点消息 protected: void focusOutEvent(QFocusEvent *event) override; };
.cpp实现
CustomLineEdit::CustomLineEdit(QWidget *parent) : QLineEdit(parent) { } CustomLineEdit::~CustomLineEdit() { } void CustomLineEdit::focusOutEvent(QFocusEvent *event) { emit Msg_SendCustomLineEditFocusOut(); QLineEdit::focusOutEvent(event); }
3.窗口功能实现
3.1双击响应QLabel控件
在Qt控件中,QLabel是不会响应鼠标按下消息,之前文章中就有提到,如何让QLabel控件响应消息 Qt|控件点击消息获取方法,这篇文章中详细讲述了如何让QLabel控件响应鼠标按下消息。
鼠标双击QLabel控件功能:双击后隐藏QLabel控件,并将QLineEdit编辑框控件、QPushButton保存控件展示出来。
//双击标题事件
if (event->type() == QEvent::MouseButtonDblClick) { //此刻,响应双击消息后,隐藏该控件,显示编辑框、和保存按钮 m_labTitle->hide(); m_editTitle->show(); m_editTitle->clear(); m_btnSave->show(); }
3.2QLineEdit失去焦点
编辑框失去焦点后功能:显示QLabel控件,隐藏QLineEdit控件并且不记录编辑的内容,并隐藏保存按钮。
m_labTitle->show(); m_editTitle->hide(); m_btnSave->hide();
3.3QPushButton保存按钮
点击保存按钮后功能:获取QLineEdit编辑框内的文本并隐藏、隐藏保存按钮,显示QLbable控件,静态文本展示。
QString qTitle = m_editTitle->text(); m_labTitle->setText(qTitle); //标题文本设置 m_labTitle->show(); m_editTitle->hide(); m_btnSave->hide();
实现了QLineEdit编辑框的失去焦点消息,那么该消息是什么时候触发呢?
例如,点击保存按钮时,先响应保存按钮,后响应鼠标失去焦点消息。