在Qt应用程序中似乎无法识别插槽

Aus*_*yde 0 c++ qt qt4 signals-slots

我最近一直在努力学习C++和Qt4,但我遇到了绊脚石.

我有以下类和实现:

class Window : public QWidget
{
public:
    Window();

public slots:
    void run();

private:
    //...
};
Run Code Online (Sandbox Code Playgroud)

和

Window::Window()
{
    //...

    connect(runBtn,SIGNAL(clicked()),this,SLOT(run()));

    //...
}
Window::run()
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试构建并运行它时,尽管它构建得很好,它会立即退出并显示消息

Object::connect: No such slot QWidget::run()
Run Code Online (Sandbox Code Playgroud)

除非我做错了什么,否则Qt似乎没有认识到这个问题 run()

有人可以帮忙吗?


更新:

代码现在是:

class Window : public QWidget
{
    Q_OBJECT
public:
    Window(QWidget *parent = 0);

public slots:
    void run();

private:
    //...
};
Run Code Online (Sandbox Code Playgroud)

和

Window::Window(QWidget *parent) : QWidget(parent)
{
    //...

    connect(runBtn,SIGNAL(clicked()),this,SLOT(run()));

    //...
}
Window::run()
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

该程序仍"意外完成",但不再告诉我没有这样的事情 QWidget::run()

Gun*_*iez 8

您可能忘记了Window类中的Q_OBJECT宏?

class Window : public QWidget
{
Q_OBJECT
public:
    Window()
...
Run Code Online (Sandbox Code Playgroud)