sys info:win xp SP3,Microsoft Visual Studio 2008 版本9.0.21022.8 RTM
Microsoft .NET Framework 版本3.5 SP1
Qt Add-in 1.1.5
我从网站http://qt.nokia.com/downloads/windows-cpp-vs2008安装了Qt 4.6.3。 然后我添加了Add-in Qt 1.1.5并配置了PATH变量。
当我打开一个新的QT项目时,默认示例工作正常。
在诺基亚(qt)网站上,我发现了一些例子,但似乎事情不能正常运作。
以下是许多不起作用的示例之一:
#include <QtGui>
#include <QWidget>
class QLabel;
class QLineEdit;
class QTextEdit;
class AddressBook : public QWidget
{
Q_OBJECT
public:
AddressBook(QWidget *parent = 0);
private:
QLineEdit *nameLine;
QTextEdit *addressText;
};
AddressBook::AddressBook(QWidget *parent)
: QWidget(parent)
{
QLabel *nameLabel = new QLabel(tr("Name:"));
nameLine = new QLineEdit;
QLabel *addressLabel = new QLabel(tr("Address:"));
addressText = new QTextEdit;
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(nameLabel, 0, 0);
mainLayout->addWidget(nameLine, 0, 1);
mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
mainLayout->addWidget(addressText, 1, 1);
setLayout(mainLayout);
setWindowTitle(tr("Simple Address Book"));
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
AddressBook addressBook;
addressBook.show();
return app.exec();
}
编译器说这个::
输出窗口
...链接
main.obj:错误LNK2001:未解析的外部符号“public:virtual struct QMetaObject const * __thiscall AddressBook :: metaObject(void)const”(?metaObject @ AddressBook @@ UBEPBUQMetaObject @@ XZ)
main.obj:错误LNK2001:未解析的外部符号“public:virtual void * __thiscall AddressBook :: qt_metacast(char const *)”(?qt_metacast @ AddressBook @@ UAEPAXPBD @ Z)
main.obj:错误LNK2001:未解析的外部符号“public:virtual int __thiscall AddressBook :: qt_metacall(enum QMetaObject :: Call,int,void * *)”(?qt_metacall @ AddressBook @@ UAEHW4Call @ QMetaObject @@ HPAPAX @Z)
main.obj:错误LNK2001:未解析的外部符号“public:static struct QMetaObject const AddressBook :: staticMetaObject”(?staticMetaObject @ AddressBook @@ 2UQMetaObject @@ B)
C:\ Documents and Settings \ nik \ My Documents \ Visual Studio 2008 \ Projects \ vs_03 \ Debug \ vs_03.exe:致命错误LNK1120:4个未解析的外部
结果
构建日志保存在“file:// c:\ Documents and Settings \ nik \ My Documents \ Visual Studio 2008 \ Projects \ vs_03 \ vs_03 \ Debug \ BuildLog.htm”中 vs_03 - 5个错误,0个警告
在我看来,这与宏Q_OBJECT的使用有关,但只是不知道该怎么做才能开始正常工作。
可能是错误的安装或......没有想法
感谢任何帮助。
答案 0 :(得分:1)
我认为这不是一个错误的安装 - 我假设您正在使用Visual Studio来构建项目,在这种情况下,您还需要告诉它构建应该为您生成的_moc.cpp文件class AddressBook。
如果尚未生成它们,则还需要在AddressBook的头文件上运行moc
。
答案 1 :(得分:1)
每当您需要moc
针对您的文件进行运行而您没有将您的课程放在单独的标头和实施文件中时,您需要在文件末尾添加#include "FILENAME.moc"
。如果你在main
函数之后添加它,那么一切都应该有效。
您应该可以通过进入项目目录并执行以下操作来测试:
qmake
- 项目以生成项目文件qmake
以生成makefile nmake
以构建项目 nmake
命令应该完全成功,并且不会像上面那样在一个简单项目上链接错误。对于更复杂的项目,您可能需要修改.pro
文件以包含Qt的webkit或以其他方式创建默认情况下不可用的可访问选项。
另一种方法是将AddressBook
的类定义移动到带有适当实现(cpp / cxx)文件的头文件中。
答案 2 :(得分:0)
我找到了解决方案。
在此页面上阅读有关安装的所有详细信息&gt;&gt;
经过一整天的学习和配置,我终于成功启用了QT 4.6.3。在VS 2008上。按照详细说明进行操作,应该没有问题。
我的问题是我使用了以下选项:
从Qt 4.6开始,LPGL版本现在为Visual Studio 2008预先构建 RTM。如果这符合您的需要,您只需安装它并跳到安装可视工作室添加。
这在我的案子中是错的,所以我进入下一章:
下载QT源代码
由于在当前的诺基亚网站上仅下载Qt源代码的选项有点混淆,请按照以下说明操作:...................... .................................................. .................................................. .................................................. .................................................. ......等等。阅读本网站。
现在一切都很棒。链接没有错误。 MOC工作得很好......