2016-10-18 142 views
1

我正在嘗試向現有的Qt應用程序添加一些網絡功能,爲此我有一個工作的MSVC項目文件。我的出發點是Qt安裝提供的'fortune server'網絡示例。我沒有問題在Qt Creator中編譯,但在MSVC中失敗。爲了得到一個有效的MSVC項目,我不得不使用Qt插件並導入Qt Creator .pro文件。這也適用,但我的問題是,我需要修改我現有的Qt項目,以使「財富服務器」示例在其中編譯。在詳細瞭解所有項目設置後,我無法找到工作和非工作項目之間的相關區別。在MSVC中配置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)" ([email protected]@[email protected]) referenced in function "public: class QObjectData * __thiscall QScopedPointer<class QObjectData,struct QScopedPointerDeleter<class QObjectData> >::operator->(void)const " ([email protected]@@[email protected]@@@@@@[email protected]@XZ) c:\Users\xxx\documents\visual studio 2013\Projects\servertest\servertest\moc_server.obj 

因爲我知道這些代碼應該工作,我覺得有ough噸是我微不足道的小事。

感謝

+0

您需要將必要的Qt模塊添加到您的項目中。你可以通過Qt插件的項目設置來做到這一點。 –

+0

你使用哪個版本的qt插件?有一個新的VS2015可以正常工作,但被標記爲beta版本。基本上,你應該配置插件,以便在項目中使用所需的qt版本,然後插件將負責添加包含目錄和庫文件。 –

回答

0

聽起來好像你還沒有建立合適的包括目錄,圖書館目錄和庫引用。在MSVC版本之間稍有變化,但您應該能夠通過右鍵單擊解決方案資源管理器窗口中的項目名稱和選定的屬性來追蹤它們。接下來的部分有點令人困惑,因爲有多個地方可以設置以下信息,我會盡力解釋。

在MSVS 2015中,在配置屬性中有一個VC++目錄部分。我相信這是您爲整個解決方案設置路徑的地方。

  • 設置包含目錄包括您包括Qt的路徑。
  • 設置庫目錄以包含Qt的lib文件路徑。

這也可以設置在每個項目的基礎上,從解決方案資源管理器

  • C/C++ - >一般 - >附加包含目錄
  • 接頭 - >一般 - >附加庫目錄

的也需要包含適當的lib文件。

  • 接頭 - >輸入 - >附加依賴​​

OR

  • 下面的代碼添加到適當的CPP文件:

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

我建議使用包含和庫路徑的每個項目設置。

+1

謝謝,這讓它工作。然而,我覺得奇怪的是,在Qt插件生成的項目的Qt Options菜單中,沒有包含像QtNetwork這樣的庫的複選框,但它們仍然包含在內。好吧。 – fulis