QT“没有这样的插槽”错误

时间:2015-07-22 11:38:30

标签: c++ qt

这是我的类定义/ .hpp文件的一部分:

class RenderGraphFrame : public QGLWidget
{
public:
    RenderGraphFrame(QWidget *parent);

private slots:
    void PrevButton();
    void NextButton();

private:
    void draw();
    QWidget *p_parent;
    bool ButtonsInited;
    QPushButton *nextButton;
    QPushButton *prevButton;
}

这是相关的来源部分:

RenderGraphFrame::RenderGraphFrame(QWidget *parent)
    : QGLWidget(QGLFormat(/*QGL::SampleBuffers*/), parent)
{
    p_parent = parent;
    /* ... */
}


void RenderGraphFrame::draw()
{
    if (ButtonsInited == false)
    {
        bool tmpttest_success;
        nextButton = parent->findChild<QPushButton *>("nextButton", Qt::FindChildrenRecursively);
        prevButton = p_parent->findChild<QPushButton *>("prevButton", Qt::FindChildrenRecursively);
        tmpttest_success = connect(_nextButton, SIGNAL (released()), this, SLOT(NextButton()));

        if (tmptest_success == false)
        {
            //this is what happens but I don't want it to happen...
        }
    }
    /*....*/
}


void RenderGraphFrame::NextButton()
{
    /*somestuff*/
    return;
}

void RenderGraphFrame::PrevButton()
{
    /*somestuff*/
    return;
}

我收到错误:

QObject::connect: No such slot QGLWidget::NextButton() in ..\Graph\some\path\to.cpp:160
QObject::connect:  (sender name:   'nextButton')

Ofcouse没有,因为我不想连接QGLWidget::NextButton(),因为我想连接RenderGraphFrame::NextButton()。 我怎么能解决这个问题?我已经把这些关于“没有这样的插槽”qt错误的帖子锁定了。但他们似乎完全是由我的其他问题造成的。

所以有任何建议如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

如评论中所述,您必须在类声明中添加Q_OBJECT宏。互联网上的许多文档将帮助您理解为什么这是必要的: