第一步
1、準備好Mysql數據庫安裝文件,Qt5.0完整的離線安裝包,以及Qt5.0的完整的源代碼。安裝好程序,假設Mysql的安裝路徑爲:C:\MySQL5.5,Qt5.0的安裝路徑:C:\Qt\Qt5.0.0-rc2\5.0.0-rc2,而Qt5.0的解壓路徑爲:C:\Qt\qt-5.0.1-src。
注意事項:(1)安裝mysql數據庫的時候,網上很多教程說要選擇自定義安裝,並把lib和include這個選項選上。其實這個並不重要。因爲我機器上很久前裝mysql時選的是typical安裝的,在安裝目錄下仍然可以找到lib和include這兩個文件夾。安裝方式並不重要。(2)Qt5.0是Qt的最新版本,在網上找到的編譯方法都是基於Qt4.x的。我這裏下載的是qt-windows-opensource-5.0.0-rc2-msvc2010_32-x86-offline.exe。這個安裝包使用的是VC編譯環境。因此,接下來的編譯工作都是使用VS編譯工具來編譯的。(3)爲什麼要下載Qt5.0的源代碼(qt-everywhere-opensource-src-5.0.1.zip)?因爲我們要編譯Qt連接mysql的驅動程序,需要使用一個mysql.pro文件。這個文件就在Qt5.0源代碼中。其路徑爲(源碼包的解壓路徑):C:\Qt\qt-5.0.1-src\qtbase\src\plugins\sqldrivers\mysql。具體的使用方式,我們在後面說明。
2、準備編譯工作。選擇開始->程序->Qt5.0.0-r2->5.0.0->MSVC2010->Qt5.0.0 for desktop(MSVC2010) prompt。我們在這個環境下使用qmake來生成編譯程序的makefile文件。爲什麼要使用這個環境?因爲,這個命令提示符已經爲我們設置好了Qt庫的環境,也即可以直接使用Qt庫相關的工具。
第二步
(1)切換工作目錄到:C:\Qt\qt-5.0.1-src\qtbase\src\plugins\sqldrivers\mysql。可以看到如下的幾個文件存在:
其中,mysql.pro就是所要的文件。所以的編譯工作都是從這個文件開始。
(2)使用qmake生成makefile自動編譯。注意大小寫不能錯。其中,include和Lib就是上面說的Mysql安裝目錄下的兩個文件夾。如下圖所示:
(3)如果一切順利,將在當前目錄生成幾個makefile文件和兩個文件夾。如下圖:
(4)接下來是重要的一部。如果我們直接在當前窗口輸入make進行編譯工作,那麼很可能會出錯,如:
更改數不勝數。這個時候,我們可以換另外一種方法,用VS2010的命令行環境來進行編譯工作,在開始菜單中選擇vs2010的一個命令行環境,切換到當前的工作目錄下,執行nmake命令:
果然,出錯了!錯誤顯示缺少某個頭文件。實際上,我們去mysql的安裝目錄include文件夾下查看,明顯是可以找到這樣一個頭文件的。那麼,怎麼辦呢?可以在命令行中用/I指示搜索路徑。但是我們還是用最笨最簡單的方法。直接將mysql安裝目錄下的include文件夾拷貝到Qt5.0的安裝路徑下。按照出錯的提示,具體路徑爲:C:\Qt\Qt5.0.0-rc2\5.0.0-rc2\msvc2010\include\QtSql。(這裏注意,不是Qt5.0源碼的路徑哦,而是Qt5.0的安裝路徑。)如果一切順利,我們就會得到幾個lib文件和dll文件。文件位於:C:\Qt\qt-5.0.1-src\qtbase\plugins\sqldrivers。這個文件夾下的文件都是編譯生成的新文件。我們將該目錄下的qsqlmysql.dll和qsqlmysqld.dll拷貝到C:\Qt\Qt5.0.0-rc2\5.0.0-rc2\msvc2010\plugins\sqldrivers目錄下即可。配置工作至此完成。
第三步
連接。使用qt creator新建一個qt console項目,示例代碼如下:
1 #include <QCoreApplication> 2 #include <QtSql/QSqlDatabase> 3 #include <QtSql/QSqlQuery> 4 #include <QDebug> 5 6 int main(int argc, char *argv[]) 7 { 8 QCoreApplication a(argc, argv); 9 10 QSqlDatabase con = QSqlDatabase::addDatabase("QMYSQL"); 11 con.setHostName("localhost"); 12 con.setDatabaseName("kxdl"); 13 con.setPort(3306); 14 con.setUserName("root"); 15 con.setPassword("root"); 16 bool ret = con.open(); 17 if(ret) 18 { 19 qDebug()<<"true"<<endl; 20 ret = false; 21 QSqlQuery qsql(con); 22 ret = qsql.exec("SELECT * FROM userInfo COUNT(*)"); 23 if(ret = true) 24 { 25 qDebug()<<"true"<<endl; 26 } 27 else 28 { 29 qDebug()<<"false"<<endl; 30 } 31 } 32 return a.exec(); 33 }
輸出結果:
至此,編譯工作自此成功結束。
轉載自:http://www.cnblogs.com/csuftzzk/archive/2013/05/04/3060212.html