2016-10-12 2 views
1

Ich bin irgendwie neu mit qt so sei sanft!Wie mache ich QLineEdit den vorherigen und den aktuellen Text in einem textChanged Signal zu senden

Ich möchte QLineEdit Unterklasse QLineEdit, um ein neues Signal zu emittieren, das den Text von dem Moment haben wird, als es den Fokus und den neuen Text bekam.

wie

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

Der Zweck dieses QLineEdit ist der Name eines Elements zu bearbeiten, falls es sie gibt es die Schaltfläche „Ok“ deaktiviert (dies im on_text_changed(QString) Schlitz durchgeführt wird).

Ich möchte überprüfen, ob der Benutzer seine Meinung geändert hat und hat den vorherigen Namen oder er rückgängig gemacht.

+0

Subclass gekröpft 'focusInEvent' in dem Sie den aktuellen Text in einer Membervariable kopieren , verbinden Sie 'textChanged' automatisch mit einem Steckplatz, in dem Sie den Vergleich durchführen, und geben Sie Signale aus, um zu sagen, ob die Zeilenbearbeitung tatsächlich geändert wurde oder nicht? – peppe

+0

@peppe vorsichtig, um dies als eine Antwort zu formulieren? Wenn nicht T.Zak: Es ist nicht falsch, wenn es noch keine Antwort gegeben hat, um zu schreiben, was du getan hast (mit einigen Details/Code) als Antwort auf deine eigene Frage und akzeptiere sie – Hayt

Antwort

2

Dank peppe.

Die folgende Unterklasse speichert den lineEdit-Text, wenn er fokussiert ist. Wenn der Text geändert wird, wird geprüft, ob der Text dem Text am Anfang entspricht. Ist dies nicht der Fall, wird textEditedCustom (QString) ausgegeben.

geht in den Header!

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); 
}; 

und die CPP-Teil

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); 
} 

Dann abonnieren Sie es wie dieser

connect(nameLineEdit , SIGNAL(textEditedCustom(QString)) , 
       this , SLOT(on_name_Changed(const QString &))); 
Verwandte Themen