【问题标题】:Configuring Qt project settings in MSVC在 MSVC 中配置 Qt 项目设置
【发布时间】:2016-10-18 13:18:02
【问题描述】:

我正在尝试向现有的 Qt 应用程序添加一些网络功能,为此我有一个工作的 MSVC 项目文件。我的出发点是 Qt 安装提供的 'fortune server' 网络示例。我在 Qt Creator 中编译它没有问题,但在 MSVC 中它失败了。为了获得一个可以工作的 MSVC 项目,我必须使用 Qt 插件并导入 Qt Creator .pro 文件。这也有效,但我遇到的问题是我需要修改我现有的 Qt 项目以使“财富服务器”示例在其中编译。在倾注了所有项目设置之后,我找不到工作项目和非工作项目之间的相关差异在哪里。

我认为缺少的设置必须等同于 .pro 文件中表达的内容,这并不多:

QT += network widgets

HEADERS       = server.h
SOURCES       = server.cpp \
                main.cpp

# install
target.path = $$[QT_INSTALL_EXAMPLES]/network/fortuneserver
INSTALLS += target

我得到的编译器错误是基本的包含语句失败,例如:

#include <QtWidgets>

因为它找不到文件/目录。

我可以通过添加大量包含语句来解决这个问题(从示例中修改 server.cpp):

#include <QtWidgets/QWidget>
#include <QtNetwork/QtNetwork>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QHBoxLayout>
#include <QtGui/QGuiApplication>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QNetworkSession>
#include <QtGui/QStyleHints>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QMessageBox>

(对于工作项目,我不需要所有类的所有那些显式包含)

但是,它仍然无法编译,并且出现以下错误:

Error   2   error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl qt_assert(char const *,char const *,int)" (__imp_?qt_assert@@YAXPBD0H@Z) referenced in function "public: class QObjectData * __thiscall QScopedPointer<class QObjectData,struct QScopedPointerDeleter<class QObjectData> >::operator->(void)const " (??C?$QScopedPointer@VQObjectData@@U?$QScopedPointerDeleter@VQObjectData@@@@@@QBEPAVQObjectData@@XZ)  c:\Users\xxx\documents\visual studio 2013\Projects\servertest\servertest\moc_server.obj 

因为我知道代码应该可以工作,所以我觉得应该缺少一些微不足道的东西。

谢谢

【问题讨论】:

  • 您需要将必要的 Qt 模块添加到您的项目中。您可以通过 Qt 插件的项目设置来实现。
  • 你使用哪个版本的qt插件?有一个新的可以与 VS2015 配合使用,但被标记为 beta 版本。基本上,您应该配置插件以在您的项目中使用所需的 qt 版本,之后该插件将负责添加包含目录和库文件。

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


【解决方案1】:

听起来您没有设置正确的包含目录、库目录和库引用。 MSVC 的版本之间有细微的变化,但您应该能够通过右键单击项目名称和在解决方案资源管理器窗口中选择的属性来跟踪它们。下一部分有点混乱,因为有多个地方可以设置以下信息,我将尝试解释两者。

在 MSVS 2015 中,配置属性中有一个 VC++ 目录部分。我相信这是您为整个解决方案设置路径的地方。

  • 设置包含目录以包含 Qt 的包含路径。
  • 设置库目录以包含 Qt 的 lib 文件路径。

这也可以从解决方案资源管理器中针对每个项目进行设置。

  • C/C++ -> 常规 -> 附加包含目录
  • 链接器 -> 常规 -> 附加库目录

还需要包含适当的 lib 文件。

  • 链接器 -> 输入 -> 附加依赖

  • 将以下代码添加到相应的 cpp 文件中:

    #pragma comment (lib, "libfile.lib") 
    

我建议对包含和库路径使用每个项目的设置。

【讨论】:

  • 谢谢你,这让它工作了。不过对我来说奇怪的是,在 Qt 插件生成的项目的 Qt 选项菜单中,没有勾选包括 QtNetwork 等库的复选框,但它们仍然被包括在内。哦,好吧。
猜你喜欢
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多