无法找到退出插槽,并使用Q_OBJECT宏

时间:2011-09-06 04:19:55

标签: visual-studio-2008 qt signals-slots qobject

我正在使用VS2008和QT 4.7.1以及加载项。我是这个环境的新手 我设法做了必要的设置,并运行简单的“你好世界”。但是当我尝试使用简单的时候 点击按钮quit()插槽,我失败了。在尝试使用Q_OBJECT时,它也会导致构建失败 评论Q_OBJECT之后构建并调试代码。现在显示

QObject :: connect:找不到。\ main.cpp中的插槽QWidget :: quit()。

下面是我的代码

#include <QtGui>
#include "QtGui\QApplication"
#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文件。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

Nitesh:您需要Q_OBJECT宏才能使插槽正常​​工作,MOC会将包含Q_OBJECT的每个标头编译为moc_ * .cpp文件。将moc * .cpp添加到您的项目中,一切都应该正常。未解决的外部意味着您缺少函数的定义,您是否在任何地方定义它?

答案 1 :(得分:0)

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

HEADERS += notepad.h

重新运行qmake,然后就可以了。