qt private slot moc undefined reference error

时间:2016-05-16 20:04:52

标签: c++ qt cmake automoc

我有一个简单的C++ Qt程序,当我使用私有插槽时,我得到未定义的引用。任何人都可以帮助我吗?

我正在使用书籍C++ GUI Programming with Qt4中的Qt5学习GUI设计。我在cmake中使用MinGW Windows编译器。

但是,如果我从头文件中注释掉Q_OBJECT,那么它会编译而不会出错。

这是头文件。

#ifndef MYWIDGETS_H
#define MYWIDGETS_H

#include <QDialog>


class mywidgets : public QDialog
{
    Q_OBJECT
public:

    mywidgets();
    void myDemoWidgets();
    void mySecondDemoWidgets();
private:
    void findLayout();

private slots:
    //void findClicked();
    void enableFindButton(const QString &text);

signals:
    void findNext(const QString &str, Qt::CaseSensitivity cs);
    void findPrevious(const QString &str, Qt::CaseSensitivity cs);
};

#endif // MYWIDGETS_H

这是错误:

myClass_automoc.cpp:-1: error: undefined reference to mywidgets::enableFindButton(QString const&)

2 个答案:

答案 0 :(得分:0)

您能否向我们展示实施(.cpp)文件,您是否在void enableFindButton(const QString &text);文件中声明了.cpp作为
void mywidgets::enableFindButton(const QString &text) { }
开始。一旦摆脱了错误,就可以将代码放入插槽体内。

答案 1 :(得分:0)

未定义引用错误是因为我没有在(void mywidgets::enableFindButton(const QString &text) { })文件中定义.cpp函数。这里给出了实现。 void mywidgets::enableFindButton(const QString &text){ findButton->setEnabled(!text.isEmpty()); }