2011-12-22 13 views
0

設定ウィジェットに複数のQLineEditウィジェットがあります。QLineEdit:複数のQLineEditウィジェットをイベントハンドラで区別するためのエレガントなソリューションはありますか?

コンフィギュレーションテキストが変更されたときに、私は更新された値を保存したいと思います(最後に1つの関数呼び出しでそれらを渡す必要はありません)。

私はそれらを1つのスロットに接続するか、またはQSignalMapperを1つのスロットに接続すると考えていました。

私はトラブルQLineEditが離れてよ伝えるためのエレガントな方法を見つけることを抱えているが、私はにQLineEditが信号を放出されたかを知りたい - 私は私がsender()を比較することはできませんロジックを実装ハンドラオブジェクトにいるので、元のオブジェクト

私のハンドラは、私は簡単に新しいテキストを得ることができるので、信号が発せられる実際のウィジェットへint idまたはQObject*またはQWidget*参照のいずれかを取得しますが、私は上の切り替えができるようにしたいように、私はQSignalMapperを介してそれらをフックすることができます一部のIDは内部的に正しい設定を更新します。

Qtオブジェクトまたはウィジェットにタグを付ける、またはラベル付けするための優雅な方法はありますか?

+0

を私は理解していない - あなたは明確だろうか? – Mat

+0

イベントがモデルで処理された場合、元のオブジェクトへの参照がないので、 'sender()が私の' serverLineEdit'または他のウィジェットであるかどうか比較できません。いくつかのID/(objectName()の代わりに)チェックできるタグ/ラベル...)。しかし、私はそれを正しくしていないかもしれません...私は 'apply'ボタンが押されたときにすべての値をモデルに渡すことができます...しかし、私はよりエレガントなものを探していました – stefanB

答えて

1

動的プロパティを使用すると、実行時にQObject派生クラスに余分なデータを「タグ付け」することができます。 QObject::setPropertyのドキュメントを参照してください。

私は個人的には、クラスのヘッダーに記載されていないため、動的プロパティを使用するのが嫌いです。私はクラスから継承し、標準プロパティを追加することを好みます。

+0

すべての答えは良い代替ソリューションを提供しますこれは 'Qt'のギャップですので、偶数ハンドラでどのウィジェットが処理されているのかを判断できるように、ウィジェットにタグを付ける簡単な方法はありません。 – stefanB

2

独自のQLineEditを値 "int id"で書き換えることができます。また、QLineEditがシグナルを出すたびに、パラメータ "id"で自分自身のシグナルを出します。ここで

class MyLineEdit : public QLineEdit 
{ 
    Q_OBJECT 
    private: int id; 
    public: int getID() { return id; } 
      void setID(int _id) { id = _id; } 
    signals: void myTextEdited(QString,int); 
    slots: void emitMyTextEdited(QString text) { emit myTextEdited(text,id); } 
    public: MyLineEdit(QWidget *parent = 0) : QLineEdit(parent) 
      { 
       connect(this,SIGNAL(textEdited(QString)),this,SLOT(emitMyTextEdited(QString))); 
      } 
}; 

オブジェクトのアイデンティティとtextEdited信号を発するようにしたい場合、あなたはあなたの方法でtextEdited信号を書き換えることができます。

1

QSignalMapperを使用して、マッピングタイプQObject*でそれらを連結します。あなたのQObjectとして、このような何かを定義することができます:あなたは `送信者を()`を使用できない理由

class MyQLineEditData : public QObject { 
    Q_OBJECT 
public: 
    QLineEdit* lineEdit ; 
    int id ; 
} ; 
関連する問題