我希望将QLineEdit
子类化以发出一个新信号,该信号将从获得焦点和新文本的那一刻开始生成文本。
像:
Signals:
void customTextChanged(const QString& previousText , const QString& currentText);
此QLineEdit
的目的是编辑项目的名称,如果它存在,则会禁用Ok_button
(这在on_text_changed(QString)
广告位中完成)。
我想检查一下用户是否改变主意并设置了之前的名字或者他已撤消。
答案 0 :(得分:3)
感谢peppe。
以下子类在聚焦时存储lineEdit
文本,然后每当文本更改时检查文本是否与开头的文本相同如果不是,它会发出textEditedCustom(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 &)));