正常来说,点击QLineEdit控件后,焦点就进入该控件,可以进行键盘文字输入了。但某些场合可能需要通过按钮来点击,切换焦点所处的QLineEdit,如图
通过点击按钮,切换焦点所在的控件,这是下面讨论的问题
好,首先要明白QLineEdit的两个接口,setFocus();和hasFocus();,前者是设置焦点,能将焦点切换到具体的QLineEdit,后者是获取焦点,返回bool值。
一开始的想法是,通过遍历获取当前QLineEdit的焦点标志,判断按钮点击后要对哪一个QLineEdit设置焦点。但问题是,点击按钮的那一刻,会将焦点切换到按钮本身上,从而导致所有的QLineEdit都失去了焦点。
所以,我们需要在QLineEdit处于焦点的时候,外部对其有一个记录,以免像上面这样被覆盖。因此,QLineEdit需要自定义一下,这里在它的focusInEvent事件中重载一下。
mylineedit.h
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
#include <QLineEdit>
#include <QDebug>
class myLineEdit : public QLineEdit
{
Q_OBJECT
public:
myLineEdit(QWidget *parent = nullptr);
~myLineEdit();
void set_num(int num_);
protected:
void focusInEvent(QFocusEvent *) override;
int num = -1;
signals:
void sig_lineedit_num(int num);
};
#endif // MYLINEEDIT_H
mylineedit.cpp