QT "No such slot"错误

QT "No such slot" Error

本文关键字:错误 slot No QT such      更新时间:2023-10-16

这是我的类定义/.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 ..Graphsomepathto.cpp:160
QObject::connect:  (sender name:   'nextButton')

当然没有,因为我不想连接QGLWidget::NextButton(),因为我想连接RenderGraphFrame::NextButton()。我怎么解这个?我已经锁定了所有这些关于"没有这样的插槽"qt错误的帖子。但它们似乎完全是由其他问题引起的,而不是我的问题。

有什么建议如何解决这个问题吗?

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

  • 何时应该使用Q_OBJECT ?
  • http://doc.qt.io/qt-5/qobject.html Q_OBJECT
  • http://doc.qt.io/qt-5/metaobjects.html