这是一个简单的代码,它创建一个按钮并分配一个onclick处理程序:
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();
我猜它以某种方式与接收器对象连接,接收器对象现在是一个不同的窗口。但是我怎样才能让它发挥作用呢?
答案 0 :(得分:5)
为了能够在你自己的类中声明信号/槽,你应该在你的类中包含Q_OBJECT指令:
class SettingsWindow {
Q_OBJECT
...
};
答案 1 :(得分:2)
您应该在类设置窗口中添加MACRO以启用信号接收。 像下面这样添加“Q_OBJECT”。
class MainWidget : public QWidget
{
Q_OBJECT
public:
MainWidget();
....