6

I have 2 classes. Class A and Class B. I am emitting a signal from class A which I want the B to recieve.

I am doing it following way

In Listener File

Header File:
  Class Listener:public DDSDataReaderListener
  {
     //Some code
    public:
       A m_objectSendData;
  }

Implementation File:

  void Listener::ondataavailable(DDSDataReader *reader)
 {
  m_objSendData.GetDDSData();
 }

In Class A

Header File:

Class A:public QObject
{
  Q_OBJECT
  public:
    void GetDDSData();
  signals:
    void Signal_Data();
}

.cpp File

 A::A(QWidget *parent):QObject(parent)
{
}

void A::GetDDSData()
 {
   emit Signal_Data();
 }   

In Class B

Header File:

  Class B:public QObject
  {
    Q_Object
    public:
    A objGetData;

    public slots:
    void getData();
  }

Implementation File:

 B::B(QWidget *parent):QObject(parent)
{
   //Some part of code

  connect(&objGetData,SIGNAL(Signal_Data()),this,SLOT(getData());
 }

 void B::getData()
 {
    //Watever is to be updated
  }

I tried debugging. It is going till emit part correctly. However it is not reaching the slot. Can someone please help me with this. Thank You.

4

2 に答える 2

0

実際、コメントの1つに答えがあると思います。

もう1つ、十分なコードを示していませんでしたが、プログラムがobjectA変数のスコープを離れ、発信オブジェクトがシグナルを発信する前に破棄されていると思われます(objectAはヒープではなくスタックで作成されたローカル変数です)。– マレク R 1 時間前

オブジェクトをスタックに割り当てると、オブジェクトがスコープ外になるとすぐに破棄され、破棄とともに、接続先のすべてのシグナル/スロットから切断されます。

コード自体は完全に正当であるため、エラー/警告メッセージが表示されないのはそのためです。オブジェクトをヒープに割り当てるには、オブジェクトを new() する必要があります。

于 2013-08-07T09:46:48.677 に答える