【问题标题】:Problems with Qt 4.6 in VS 2008VS 2008 中 Qt 4.6 的问题
【发布时间】:2011-03-09 21:36:41
【问题描述】:

系统信息:win xp SP3,Microsoft Visual Studio 2008 版本 9.0.21022.8 RTM

Microsoft .NET 框架 版本 3.5 SP1

Qt 插件 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 : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall AddressBook::metaObject(void)const " (?metaObject@AddressBook@@UBEPBUQMetaObject@@XZ)

main.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall AddressBook::qt_metacast(char const *)" (?qt_metacast@AddressBook@@UAEPAXPBD@Z)

main.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall AddressBook::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@AddressBook@@UAEHW4Call@QMetaObject@@HPAPAX @Z)

main.obj : error LNK2001: unresolved external symbol "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 unresolved externals

结果

构建日志保存在“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 的使用有关,但只是不知道该怎么做,这件事开始正常工作。

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

感谢任何帮助。

【问题讨论】:

  • 似乎与 MOC 相关。确保 MOC 正在为此示例生成匹配的 moc_.cpp 文件。如果是,请确保将 moc_.cpp 文件添加到项目中。
  • 你有使用过 VS2008-Qt 的经验吗?分几步有什么解释吗?
  • 抱歉,很遗憾没有。我从命令行执行大部分操作,所以我的建议类似于 Timo 的建议。

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


【解决方案1】:

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

如果它们还没有生成,您还需要在 AddressBook 的头文件上运行 moc

【讨论】:

  • 来自站点:dcsoft.wordpress.com/?aspxerrorpath=/community_server/blogs/… 1. 下载并安装 Qt Visual Studio 插件,将 Qt 插件安装到 Visual Studio 中(插件支持 2005 和 2008)。 2. 启动 Visual Studio。 3. 选择菜单 Qt |配置 Qt 版本。添加 c:\qt\4.6.3 。 4. 现在Qt功能齐全,可以使用VS2005/2008构建Qt应用了。在我看来,正如它所说,它是由VS自动完成的。不确定!
  • @nik_02 - 您看到的错误是您在未生成或编译 _moc.cpp 文件时遇到的典型错误。我使用 VS2008 构建 QT 应用程序,但我没有使用该插件,所以情况可能会略有不同。不过,您需要检查这些文件是否已生成并编译以消除链接错误。
【解决方案2】:

任何时候您需要moc 来针对您的文件运行并且您的类不在单独的头文件和实现文件中,您需要在文件末尾添加#include "FILENAME.moc"。如果您要在 main 函数之后添加它,那么一切都应该正常。

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

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

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

替代方法是将AddressBook 的类定义移动到具有适当实现 (cpp/cxx) 文件的头文件中。

【讨论】:

  • 谢谢。与此同时,我从(构建您自己的)版本安装了 Qt,一切都按预期工作。这是我的错,因为我最初使用的是 Qt 的预构建版本。
  • 我一直使用 Qt 的预构建(商业)版本,没有任何问题。只要预构建的版本与您的编译器匹配(即 MSVC 与 GCC),您就不会有任何问题。
【解决方案3】:

我找到了解决办法。

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

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。如果这符合您的需要,您可以简单地安装它并跳至安装 VISUAL STUDIO ADD-IN。

在我的情况下这是错误的,所以我转到下一章:

下载 QT 源代码

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

目前一切正常。链接中没有错误。 MOC 工作正常...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    相关资源
    最近更新 更多