gpt4 book ai didi

c++ - 如何使 QLineEdit 在 textChanged 信号中发出上一个和当前文本

转载 作者:搜寻专家 更新时间:2023-10-31 01:34:13 25 4
gpt4 key购买 nike

我想子类化 QLineEdit 以发出一个新信号,该信号将包含从获得焦点和新文本那一刻起的文本。

喜欢:

Signals:
void customTextChanged(const QString& previousText , const QString& currentText);

QLineEdit 的目的是编辑项目的名称,如果它存在,它会禁用 Ok_button(这是在 on_text_changed( QString) 插槽).

我想检查用户是否改变了主意并设置了以前的名称或者他撤消了。

最佳答案

感谢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 &)));

关于c++ - 如何使 QLineEdit 在 textChanged 信号中发出上一个和当前文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39993686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com