2012-04-18 56 views
0

下面是一個簡單的代碼,創建一個按鈕,並指定onclick處理程序:Qt:爲什麼connect()只能在主窗口類中工作?

auto btn = new QPushButton("CLICK ME"); 
connect(btn, SIGNAL(clicked()), this, SLOT(btn_Click())); 

private slots: 
void btn_Click() { 
    alert("clicked!"); 
} 

它的工作原理,因爲它應該好象叫主窗口類。但是,當我嘗試在子窗口中執行此操作時,單擊該按鈕不會執行任何操作。子窗口如下所示:

auto settingsWindow = new SettingsWindow(); 
settingsWindow->show(); 

我想它是以某種方式與接收器對象連接的,它現在是不同的窗口。但是我怎麼能使它工作?

+1

你忘了在類定義中包含Q_OBJECT嗎? – Patrick 2012-04-18 10:35:24

+0

很可能是'Q_OBJECT'問題。除非在控制檯中出現錯誤(即無法將信號連接到插槽) – Anonymous 2012-04-18 10:44:18

回答

5

爲了能夠在自己的類聲明的信號/插槽,你應該在你的類Q_OBJECT指令:

class SettingsWindow { 
     Q_OBJECT 

     ... 
}; 
+0

+1,因爲最常見的原因.... – Anonymous 2012-04-18 10:43:19

+0

感謝您的快速和合理的答覆。我一直忘記添加這些... – Alex 2012-04-18 10:53:06

2

你應該在課堂上添加宏SettingsWindow,使葛接收。 添加如下所示的「Q_OBJECT」。

class MainWidget : public QWidget 
{ 
    Q_OBJECT 
    public: 
    MainWidget(); 
.... 
+0

儘管已經發布了類似的答案:使用Q_OBJECT時繼承自QWidget的+1,因爲當不從QObject或其任何子類繼承時,宏將不起作用 – 2012-04-18 11:25:12

相關問題