VS 2008中Qt 4.6的问题

时间:2010-06-29 23:33:01

标签: c++ visual-studio-2008 qt

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的使用有关,但只是不知道该怎么做才能开始正常工作。

可能是错误的安装或......没有想法

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

我认为这不是一个错误的安装 - 我假设您正在使用Visual Studio来构建项目,在这种情况下,您还需要告诉它构建应该为您生成的_moc.cpp文件class AddressBook。

如果尚未生成它们,则还需要在AddressBook的头文件上运行moc

答案 1 :(得分:1)

每当您需要moc针对您的文件进行运行而您没有将您的课程放在单独的标头和实施文件中时,您需要在文件末尾添加#include "FILENAME.moc"。如果你在main函数之后添加它,那么一切都应该有效。

您应该可以通过进入项目目录并执行以下操作来测试:

  • 删除任何可能存在的makefile
  • 运行Visual Studio命令提示符
    • 运行qmake - 项目以生成项目文件
    • 运行qmake以生成makefile
    • 运行nmake以构建项目

nmake命令应该完全成功,并且不会像上面那样在一个简单项目上链接错误。对于更复杂的项目,您可能需要修改.pro文件以包含Qt的webkit或以其他方式创建默认情况下不可用的可访问选项。

另一种方法是将AddressBook的类定义移动到带有适当实现(cpp / cxx)文件的头文件中。

答案 2 :(得分:0)

我找到了解决方案。

在此页面上阅读有关安装的所有详细信息&gt;&gt;

http://dcsoft.wordpress.com/?aspxerrorpath=/community_server/blogs/dcsoft/archive/2009/03/06/how-to-setup-qt-4-5-visual-studio-integration.aspx

经过一整天的学习和配置,我终于成功启用了QT 4.6.3。在VS 2008上。按照详细说明进行操作,应该没有问题。

我的问题是我使用了以下选项:

从Qt 4.6开始,LPGL版本现在为Visual Studio 2008预先构建 RTM。如果这符合您的需要,您只需安装它并跳到安装可视工作室添加。

这在我的案子中是错的,所以我进入下一章:

下载QT源代码

由于在当前的诺基亚网站上仅下载Qt源代码的选项有点混淆,请按照以下说明操作:...................... .................................................. .................................................. .................................................. .................................................. ......等等。阅读本网站。

现在一切都很棒。链接没有错误。 MOC工作得很好......