Qt:为什么connect()只在主窗口类中工作

Qt: why does connect() work only in the main window class?

本文关键字:窗口 工作 为什么 connect Qt      更新时间:2023-10-16

下面是一个简单的代码,用于创建一个按钮并分配一个 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();

我想它以某种方式与接收器对象相连,该对象现在是一个不同的窗口。但是我怎样才能让它工作呢?

为了能够在自己的类中声明信号/插槽,您应该在类中包含Q_OBJECT指令:

class SettingsWindow {
        Q_OBJECT
        ...
};

您应该在类设置窗口中添加一个宏以启用单行接收。添加"Q_OBJECT",如下所示。

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