我使用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,然后它应该工作