请参阅Qt中的发件人对象

时间:2016-02-16 14:31:57

标签: c++ qt

我遇到了一些麻烦,我对Qt和C ++很陌生,并且正在测试水域。我试着按如下方式描述我的问题。我有一个LineEdit QLineEdit,这个编辑有一个如下所示的连接:

connect(my_lineedit, SIGNAL (textEdited(QString)),this, SLOT (handleEdits()));

调用handleEdits()方法并执行以下操作:

  1. my_lineedit
  2. 断开之前的信号
  3. 创建一个新的QLineEdit,它会收到一个新信号并调用handleAddedEdits()
  4. 将新创建的编辑添加到我的布局中。
  5. 上述说明工作正常我只是告诉你这样你才能得到照片。 现在在我称之为handleAddedEdits()的新方法中,我想要再次发生相同的过程。

    1. 从首先调用此方法的编辑中断开调用handleAddedEdits()的信号。
    2. 制作新的QLineEdit
    3. 将此添加到我的布局中。
    4. 问题是:在第一种情况下my_lineedit在我的班级中声明,所以我可以自由地引用它并按照我的意愿删除信号。在第二种情况下,我有一个QLineEdit,它是在handleEdits()方法中动态创建的,是“发件人”。我的问题是,我如何参考“发件人对象”ro从动态创建的编辑中删除信号?

1 个答案:

答案 0 :(得分:5)

您需要在收件人的插槽中使用QObject::sender()方法:

  

如果您需要有关发件人的信息   signal,Qt提供QObject::sender()函数,返回a   指向发送信号的对象的指针。

handleAddedEdits()
{
    QObject* obj = sender();
    disconnect( obj, SIGNAL(textEdited(QString)), 0, 0 );
    //...
}