2016-10-12 4 views
1

Qtで新しくなったので、やさしくしてください!QLineEditをtextChangedシグナル内の前のテキストと現在のテキストを出力する方法

QLineEditをサブクラス化して、フォーカスを得た瞬間からのテキストと新しいテキストを持つ新しい信号を放出したいと考えています。

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

ように、このQLineEditの目的は、それが「OK」ボタン(これはon_text_changed(QString)スロットで行われる)を無効に存在する場合に、アイテムの名前を編集することです。

ユーザーが心を変えて以前の名前を設定したか、元に戻したかどうかを確認したいと思います。

+0

サブクラス、オーバーライド 'focusInEvent'のようにそれを購読します比較を行うあなたのスロットに 'textChanged'を自己接続し、行編集が実際に変更されたかどうかを示すシグナルを出しますか? – peppe

+0

@peppeこれを答えにするには気をつけますか? T.Zakでない場合:自分の質問に対する答えとしてあなたがしたことを(いくつかの詳細/コードとともに)書くための回答がまだない場合は間違いではない – Hayt

答えて

2

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_name_Changed(const QString &))); 
関連する問題