2012-04-18 143 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