0

QLineEdit構成ウィジェットに複数のウィジェットがあります。

構成テキストが変更されたときに、更新された値を保存したいと思います (いくつかあるので、最後に 1 つの関数呼び出しでそれらを渡したくありません)。

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

ただし、QLineEdits を区別するエレガントな方法を見つけるのに苦労しています。どの QLineEdit がシグナルを発したかを知りたいですsender()。元のオブジェクトと比較できないロジックを実装するハンドラー オブジェクトにいるためです。

QSignalMapperハンドラーが信号を発信した実際のウィジェットへの参照または参照を取得できるようにそれらを接続して、新しいテキストを簡単に取得できるようにすることができますが、ID をオンにして内部で正しい設定を更新できるようにしたいと考えてint idいますQObject*QWidget*.

Qt オブジェクトまたはウィジェットにタグ付けまたはラベル付けするエレガントな方法はありますか?

4

3 に答える 3

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

ここで、オブジェクトの ID で textEdited シグナルを発行したい場合は、textEdited シグナルを自分のやり方で書き直すことができます。

于 2011-12-22T11:44:36.503 に答える
1

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

クラスのヘッダーに文書化されていないため、個人的には動的プロパティを使用するのは好きではありません。クラスから継承し、標準プロパティを追加することを好みます。

于 2011-12-22T11:30:18.563 に答える
1

QSignalMapperのマッピング タイプで、 を介してそれらを接続しQObject*ます。次のようなものを として定義できますQObject

class MyQLineEditData : public QObject {
  Q_OBJECT
public:
  QLineEdit* lineEdit ;
  int id ;
} ;
于 2011-12-22T12:07:41.790 に答える