QLineEdit:在事件处理程序中是否有一个优雅的解决方案来分辨多个QLineEdit小部件?

时间:2011-12-22 06:32:02

标签: c++ qt qlineedit

我在配置小部件上有多个QLineEdit小部件。

当配置文本被更改时,我想存储更新的值(其中有一些,所以我不想在最后的一个函数调用中传递它们。)

我正在考虑将它们连接到一个插槽或通过QSignalMapper到一个插槽。

然而,我无法找到一种优雅的方式来告诉QLineEdit s,我想知道哪个QLineEdit发出了信号 - 因为我在处理器对象中实现了我无法比较的逻辑sender()与原始对象。

我可以通过QSignalMapper将它们连接起来,以便我的处理程序获得int idQObject*QWidget*引用发出信号的实际窗口小部件,以便我可以获得很容易新文本,但我希望能够打开一些内部更新正确的设置。

有没有优雅的方法来标记或标记Qt对象或小部件?

3 个答案:

答案 0 :(得分:2)

您可以使用值“int id”重写自己的QLineEdit。每当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 :(得分:1)

动态属性允许您在运行时将额外数据“标记”到任何QObject派生类。请参阅QObject::setProperty文档。

我个人不喜欢使用动态属性,因为它们未在类的标题中记录。我更喜欢从类继承并添加标准属性。

答案 2 :(得分:1)

通过QSignalMapper连接它们,映射类型为QObject*。您可以将此类内容定义为QObject

class MyQLineEditData : public QObject {
  Q_OBJECT
public:
  QLineEdit* lineEdit ;
  int id ;
} ;