編譯環境:
(1) win7/64
(2) VS2010
(3) qt-everywhere-opensource-src-4.8.6.zip
2.1 開始 -> 所有程式 ->Micorsoft Visual Studio 2010->visual studio tools-> Visual Studio x64 win64 command prompt (2010)
2.2 用cd指令 進入D:\QtLib_4.8.6\qt-everywhere-opensource-src-4.8.6檔案夾
2.3 設定如下環境變量:
set QTDIR=D:\QtLib_4.8.6\qt-everywhere-opensource-src-4.8.6
set QMAKESPEC=win32-msvc2010
2.4 修改一些錯誤:
(1)打開這個檔案:<Qt Dir>\src\3rdparty\webkit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp
按Ctrl+G定位 到 327 行, 改為:
return WEB_UI_STRING("Look Up \"<selection>\"", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));
注意第一個括号内look up 後的雙引号。
(2)--- mkspecs/win32-msvc2010/qmake.conf
+++ mkspecs/win32-msvc2010/qmake.conf
QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF
QMAKE_LFLAGS_DEBUG = /DEBUG
修改為
QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF /INCREMENTAL:NO
QMAKE_LFLAGS_DEBUG = /DEBUG /INCREMENTAL:NO
2.5 配置編譯QT的選項 (可利用configure -hlep指令檢視各選項意義,自己選擇編譯子產品)
configure -opensource -nomake demos -nomake examples -platform win32-msvc2010 -webkit
提示:Do you accept the terms of the lisence ? 輸入y, 則開始編譯qmake工具
2.6 Configure完成後,會在D:\QtLib_4.8.6\qt-everywhere-opensource-src-4.8.6下生成Project.sln,使用VS2010打開後進行release/debug x64 編譯
錯誤 234
error LNK2019: 無法解析的外部符号 _HBeginPaint,該符号在函數 "private: static struct HDC__ * __cdecl
WebCore::PluginView::hookedBeginPaint(struct HWND__ *,struct tagPAINTSTRUCT *)" ([email protected]@[email protected]@CAPEAUHDC__@@PEAUHWND__@@[email protected]@@Z) 中被引用
E:\Libraries\qt4\src\3rdparty\webkit\Source\WebKit\qt\webcore.lib(PluginViewWin.obj)
QtWebKit
錯誤 235
error LNK2019: 無法解析的外部符号 _HEndPaint,該符号在函數 "private: static int __cdecl
WebCore::PluginView::hookedEndPaint(struct HWND__ *,struct tagPAINTSTRUCT const *)" ([email protected]@[email protected]@CAHPEAUHWND__@@[email protected]@@Z) 中被引用
E:\Libraries\qt4\src\3rdparty\webkit\Source\WebKit\qt\webcore.lib(PluginViewWin.obj)
QtWebKit

通過Find Solution,你會找到hookedBeginPaint的定義在webcore--->PluginViewWin.cpp中。出問題代碼如下:
如上圖,打鈎地方_HBeginPaint函數是一個無法解析外部符号,其實本質原因無非就是_HBeginPaint定義代碼,沒有加載進入工程當中。這是為什麼呢???
從本源檔案開頭,有_HBeginPaint的定義,你會發現這是一種c++調用彙編代碼方式。
#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC)
extern "C" HDC __stdcall _HBeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
extern "C" BOOL __stdcall _HEndPaint(HWND hWnd, const PAINTSTRUCT* lpPaint);
#endif
驗證想法的是,在PluginViewWin.cpp同目錄下,有一個彙編檔案PaintHooks.asm,使用普通記事本打開,你會發現,裡面就是定義了 _ HBeginPaint函數。
PaintHooks.asm裡面内容為:
到這裡我們就可以下一個結論了,對于vs2010為什麼會報無法解析外部符号 _ HBeginPaint。 原因,就是vs2010采用c++編譯器,是無法編譯彙編語言的。是以需要設定彙編編譯器,單獨編譯PaintHooks.asm檔案,成為二進制檔案PaintHooks.obj。
就這問題,筆者重新羅列一下步驟:
1.選中webcore這個工程,右鍵---》添加----》現有項,将PaintHooks.asm加入到工程當中,在Source Files分類中,可以找到這個檔案。
2.選中webcore這個工程,右鍵---》生成自定義----》勾選“masm(.targets .props)”選項---》确定
3.在Source Files分類中,可以找到PaintHooks.asm,選中,右鍵---》屬性--》在“正常”頁籤中,對“項類型”選擇“Microsoft
Macro assembler”--》确定。
4.選中PaintHooks.asm,右鍵----》編譯,在.\src\3rdparty\ webkit \Source\WebCore\tmp\obj\release _ shared目錄下,就會生成PaintHooks.obj二進制檔案,這個檔案就可以被c
++代碼直接調用,具體調用回到前面所述c++調用彙編函數代碼。
tst _ qwebpage/tst _ qwebview/tst _ qwebframe:
以上三個工程屬于同一種解決方法。
首先,按照提示,定位到問題所在行2682,如下圖
根據vs2010紅線提示功能,你會發現TEST _ SOURCE _ DIR提示有問題。滑鼠放在所有變量,會提示一個路徑。實際上這個路徑就是qwebpage/qwebview/qwebframe的源碼路徑。TEST _ SOURCE _ DIR宏在這裡無法識别,是以,隻要在每一個出問題源檔案人工定義該宏值,就可以handle這個bug。我電腦的該路徑為E:\Libraries\qt4\src\3rdparty\ webkit \Source\ WebKit \qt\tests\
在頭檔案定義下面加入宏定義為:
#include <qwebsecurityorigin.h>
#include <qwebview.h>
#include <qimagewriter.h>
#define TESTS_SOURCE_DIR "E:/Libraries/qt4/src/3rdparty/webkit/Source/WebKit/qt/tests/"
重新編譯,就可以解決這個問題了。
安裝QT Addin 1.1.11插件
插件也是什麼都不用改,按照預設配置進行安裝。 QT Addin 1.11安裝完成之後,就可以在VS裡面進行QT項目的開發了。
配置VS2010
然後介紹怎麼配置VS2010中的QT目錄。
打開VS2010,發現菜單欄多了QT的菜單。
然後點選QT菜單項,選擇QT Options選項。
然後按照下圖中的步驟,點選Add, 然後選擇QT的安裝目錄,最後點選确定就可以了。
第五步:安裝Visual Assist X并配置。
首先安裝Visual Assist X的安裝包,按照預設安裝即可。 然後重新打開VS2010,發現菜單項多了VAssistX。
然後,點選VAssistX菜單,并選擇Visual Assist Options選項。
然後按照下面的步驟,依次點選,選擇要包含的QT庫檔案。
最後要添加的常用的庫為:(如果日後,要用其他的庫檔案,再添加即可)
最後再選擇Visual Assist Options選項,點選Performance選項,點選Rebuild即可。
使用qt建立工程,報錯
1:注意:打開main.cpp檔案,否則 “Qt Project Settings”是灰色,不可選;
2:選擇編譯機器上的版本:
Version修改為Qt4.8.6版本,而不是msvc2010即可