Slot seemingly not recognized in Qt app [duplicate

2019-03-06 00:54发布

This question already has an answer here:

I have been working on learning C++ and Qt4 recently, but I have hit a stumbling block.

I have the following class and implementation:

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

public slots:
    void run();

private:
    //...
};

and

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

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

    //...
}
Window::run()
{
    //...
}

However, when I attempt to build and run it, although it builds just fine, it immediately exits out with the message

Object::connect: No such slot QWidget::run()

Unless I did something wrong, Qt does not seem to be recognizing the slot run()

Could anyone please help?


Update:

The code is now:

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

public slots:
    void run();

private:
    //...
};

and

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

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

    //...
}
Window::run()
{
    //...
}

The program still "unexpectedly finished", but no longer tell me that there is no such thing as QWidget::run()

4条回答
可以哭但决不认输i
2楼-- · 2019-03-06 01:27

Looks like runBtn is not instantiated at the time connect is called -- as implied by one of the other answers.

Use breakpoints to check where the crash is happening.

查看更多
疯言疯语
3楼-- · 2019-03-06 01:32

Possibly you have forgotten a Q_OBJECT macro in your Window class?

class Window : public QWidget
{
Q_OBJECT
public:
    Window()
...
查看更多
祖国的老花朵
4楼-- · 2019-03-06 01:35

Well I was having this problem too and could find no help on-line. I found out that I was forgetting to delete the moc_* files before recompiling and it was using the old moc files to create the executable file. This caused it to not know about any new slots I had coded. I would check that if all the rest of these suggestions failed.

Sometimes the simplest solution is the best solution...

查看更多
孤傲高冷的网名
5楼-- · 2019-03-06 01:39

What is runBtn, and how is it created? If it's created as part of a ui file, are you calling setupUi()? How is your window class being created? You seem to have omitted some code (// ...) which may be where the error is.

The best advice I can give to to try and reduce your problem to a very small compilable example. This helps for two reasons:

  1. It helps you diagnose the problem, since there'll be less code to look at.
  2. If you still need our help, it'll help us since we will have a complete codebase we can download, compile and debug. Often the problem is not where you think it is.

Hope this helps.

查看更多
登录 后发表回答