【发布时间】: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