C++ 如何使QLineEdit在textChanged信号中发出上一个文本和当前文本
我想将C++ 如何使QLineEdit在textChanged信号中发出上一个文本和当前文本,c++,qt,subclassing,C++,Qt,Subclassing,我想将QLineEdit子类化,以发出一个新的信号,该信号将从文本获得焦点和新文本的那一刻起产生文本 比如: 此QLineEdit的目的是编辑项目的名称,如果项目存在,它将禁用Ok\u按钮(这是在on\u text\u changed(QString)插槽中完成的) 我想检查用户是否改变了主意,是否设置了以前的名称,或者是否撤消了。多亏了 以下子类在聚焦时存储lineEdit文本,然后每当文本更改时检查文本是否与开始时的文本相同,如果不相同,则发出textedcustom(QString) 去头
QLineEdit
子类化,以发出一个新的信号,该信号将从文本获得焦点和新文本的那一刻起产生文本
比如:
此QLineEdit
的目的是编辑项目的名称,如果项目存在,它将禁用Ok\u按钮
(这是在on\u text\u changed(QString)
插槽中完成的)
我想检查用户是否改变了主意,是否设置了以前的名称,或者是否撤消了。多亏了
以下子类在聚焦时存储lineEdit
文本,然后每当文本更改时检查文本是否与开始时的文本相同,如果不相同,则发出textedcustom(QString)
去头球
class customQLineEdit: public QLineEdit
{
Q_OBJECT
public :
explicit customQLineEdit(QWidget* parent = 0 );
explicit customQLineEdit(const QString &str, QWidget* parent=0);
signals:
void textEditedCustom(const QString& text);
public slots:
void on_Text_Edited_custom(const QString& currentText);
protected:
QString previousText;
virtual void focusInEvent(QFocusEvent* e);
};
以及.cpp部分
customQLineEdit::customQLineEdit(QWidget* parent ):
QLineEdit(parent)
{
connect(this , SIGNAL(textEdited(QString)) ,
this , SLOT(on_Text_Edited_custom(QString)));
}
customQLineEdit::customQLineEdit(const QString &str, QWidget* parent):
QLineEdit(str , parent)
{
connect(this , SIGNAL(textEdited(QString)) ,
this , SLOT(on_Text_Edited_custom(QString)));
}
void customQLineEdit::focusInEvent(QFocusEvent* e)
{
previousText = text();
QLineEdit::focusInEvent(e);
}
void customQLineEdit::on_Text_Edited_custom(const QString& txt)
{
if(previousText != txt)
emit textEditedCustom(txt);
}
然后您可以这样订阅它:
connect( nameLineEdit , SIGNAL(textEditedCustom(QString)) ,
this , SLOT(on_nameLineEdit _Changed(const QString &)));
子类,重写
focusInEvent
,您可以在其中复制成员变量中的当前文本,将textChanged
自连接到您进行比较的插槽中,并发出信号,说明行编辑是否已实际修改?@peppe是否愿意将此表述为一个答案?If not T.Zak:如果还没有答案,那么写下你所做的事情(包括一些细节/代码)作为你自己问题的答案并接受它并没有错。请注意,如果你使用setText()进行编程更改,事件中就没有焦点。在这种情况下,这不起作用。
connect( nameLineEdit , SIGNAL(textEditedCustom(QString)) ,
this , SLOT(on_nameLineEdit _Changed(const QString &)));