2011-05-10 115 views
3

我在QT疑問C++如何連接Qt中不同對象的信號和插槽?

假設這是main.cpp中

#include "head.h" 
#include "tail.h" 

int main() 
{ 
    head *head_obj = new head(); 
    tail *tail_obj = new tail(); 
    //some code 
} 

這裏是head.h

class head:public QWidget 
{ 
    Q_OBJECT 

    /* some code */ 

    public slots: 
    void change_number(); 
}; 

這裏是tail.h

class tail:public QWidget 
{ 
Q_OBJECT 

    /* some code */ 
    /* some code */ 
    QPushButton *mytailbutton = new QPushButton("clickme"); 

    //this is where i need help 
    connect(button,SIGNAL(clicked()),?,?); 

}; 

現在我該如何將mytailbutton的信號clicked()連接到head class slot change_number? 我只是覺得這是不可能的。

謝謝你的幫助!

+0

您是否正在手動刪除分配的內存?如果不是,那麼這是一個問題。對於QObject派生類,您可以在構造函數中添加一個父對象,並在析構時釋放子對象(例如,您正在添加'QPushButton'的QWidget實例)。 – 2011-05-10 16:24:06

回答

1

您連接實例的信號和插槽,而不是類。

您需要將接收器和發射器對象的地址連接在一起。

connect(button, SIGNAL(clicked()), 
     pointer_to_instance_of_head, SLOT(change_number())); 

(假設「按鈕」是一個指針)。

獲取該指針是另一個問題,但除非您沒有充分的理由不這樣做,否則我建議在您導出的QWidget的構造函數中構造頭對象。

0

嗯,你表現出來你真的很abbriated代碼假設一切就是這麼簡單,它應該是簡單的

connect(aTailInstance->tailButon, SIGNAL(clicked()), aHeadInstance, SLOT(change_number())); 

然而,隨着你的代碼已經在這裏表明它是無法確定什麼樣的功能你在追求什麼,並且不清楚你究竟在問什麼。