我试图将一些网络功能添加到现有的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>
因为它无法找到文件/目录。
我可以通过添加大量的include语句(示例中修改后的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
因为我知道代码应该有效,所以我觉得我应该有一些微不足道的东西。
由于
答案 0 :(得分:0)
听起来您没有设置正确的包含目录,库目录和库引用。 MSVC版本之间略有不同,但您应该能够通过在“解决方案资源管理器”窗口中右键单击项目名称和所选属性来跟踪它们。下一部分有点令人困惑,因为有多个地方可以设置以下信息,我将尝试解释这两个部分。
在MSVS 2015中,配置属性中有一个VC ++目录部分。我相信这是您为整个解决方案设置路径的地方。
也可以从解决方案资源管理器中按项目设置。
还需要包含相应的lib文件。
OR
将以下代码添加到相应的cpp文件中:
#pragma comment (lib, "libfile.lib")
我建议您使用include和库路径的每个项目设置。