找不到退出槽,使用Q_OBJECT宏



我使用VS2008与QT 4.7.1和插件。我对这个环境不熟悉。我设法做必要的设置和运行简单的"hello world"。但当我试着用简单点击quit()插槽,我失败了。当尝试使用Q_OBJECT时,也会导致构建失败。
注释完成后,构建Q_OBJECT代码并进行调试。现在显示

QObject::connect: no such slot QWidget::quit() in. main.cpp found.

下面是我的代码

#include <QtGui>
#include "QtGuiQApplication"
#include "QObject"

class Notepad : public QWidget
{
    //Q_OBJECT 
public:
    Notepad();
    private slots:
        void quit();
private:
    QTextEdit *textEdit;
    QPushButton *quitButton;
}; 
Notepad::Notepad()
{
    textEdit = new QTextEdit;
    quitButton = new QPushButton(tr("Quit"));
    connect(quitButton, SIGNAL(clicked()), this, SLOT(quit() ));
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(textEdit);
    layout->addWidget(quitButton);
    setLayout(layout);
    setWindowTitle(tr("Notepad"));
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Notepad nt;// = new Notepad();
    nt.show();
    return a.exec();
}

我已经通过网络搜索,但未能得到合理的解决方案。大多数解决方案都是在命令行上使用qmake的。此外,我能够找到.pro文件的项目。

任何帮助都是感激的。

Nitesh:您需要Q_OBJECT宏才能使插槽正常工作,MOC将包含Q_OBJECT的每个头文件编译为moc_*.cpp文件。将moc*.cpp添加到您的项目中,一切都应该正常工作。未解决的外部意味着你错过了函数的定义,你在哪里定义它了吗?

将Notepad的声明移动到标题中(例如Notepad .h),重新启用Q_OBJECT,然后添加到.pro文件中:

HEADERS += notepad.h

重新运行qmake,然后它应该工作

最新更新