1

我正在使用带有 QT 4.7.1 和插件的 VS2008。我是这个环境的新手。
我设法进行必要的设置并运行简单的“hello world”。但是当我尝试 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 文件。

任何帮助表示赞赏。

4

2 回答 2

1

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

于 2011-09-06T12:52:06.760 回答
0

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

HEADERS += notepad.h

重新运行 qmake,然后它应该可以工作了。

于 2011-09-06T05:27:53.063 回答