早出晚歸,從中午到下午吃飯,終于把類似QQ的登錄界面基本畫完了,當(dāng)然對于高手來說很簡單了。然后我就準(zhǔn)備與數(shù)據(jù)庫連接,實現(xiàn)登錄功能。至于那個帳號選擇,和相應(yīng)的頭像,不打算用數(shù)據(jù)庫,因為太浪費了,我想的是當(dāng)?shù)谝淮芜B接時,從數(shù)據(jù)庫里面肯定會有相應(yīng)頭像在里面,那么我就從本地copy過來,然后放在本地文件,這邊以后帳號選擇的時候,就可以直接從本地同步頭像。初步是這樣設(shè)想。
數(shù)據(jù)庫連接也是個大問題,剛開始覺得連接Mysql數(shù)據(jù)庫跟以前用java的eclipse一樣簡單,加載下驅(qū)動包就行了。沒想到要自己編譯,而且還有很多奇怪的問題出現(xiàn)。上網(wǎng)找資料的時候,說法有時候不太管用。自己琢磨了很久,終于連上了,實現(xiàn)了查詢。還是高興的。用sqlite的時候就是能連接上,但是始終查詢沒反映,所以糾結(jié)了老長時間,最終舍棄了。不是自己意志力不夠,有時候還是要換下思路。
下面開始說下自己在Windows7下編譯,連接到查詢的整個過程:
1.這是我的初始界面(頭像更新以后再做)
2.我用登錄按鈕來做連接測試,連接成功注冊帳號就改為ok,查詢結(jié)果放在第一個QLineEdit里面。
下面開始,這樣以后我不會了再回來參考下:
1.下載mingw-utils-0.3,百度里面太少了,你去google,很多。(這里我要說明一點就是。很多人在安裝MySQL的時候不是完全安裝的話就沒有opt那個目錄,更別說libmysql.lib這個文件了,所以你要完全安裝,把原來的卸載掉,或者再裝個其它版本,不沖突的。)
2.將其解壓,找到bin目錄下的reimp.exe,然后拷貝到C:\MinGW\bin目錄下,當(dāng)然你的MinGW裝載哪你就相應(yīng)拷貝到那個bin目錄下。
3.由于后面要用到reimp命令,所以把MinGW的bin目錄加載到classpath中,如果沒有就新建系統(tǒng)環(huán)境變量classpath,我的是windows7,如下圖:
4.進入C:\Program Files\MySQL\MySQL Server 5.0\lib\opt目錄,因為我的MySQL是裝在這的,這要看你裝哪了。進入之后可以看到有l(wèi)ibmysql.lib和其它相關(guān)文件。
然后執(zhí)行如下命令:(dos)
1>C:\Program Files\MySQL\MySQL Server 5.0\lib\opt>reimp -d libmysql.lib
2>C:\Program Files\MySQL\MySQL Server 5.0\lib\opt>dlltool -k -d libmysql.def -l libmysql.a
完成之后那個libmysql.a文件就誕生了。這是所需的重要文件。
5.然后我就按照網(wǎng)上的一些說法。
然后轉(zhuǎn)到Qt的目錄下(我的為C:\Qt\4.3.2\src\plugins\sqldrivers\mysql).
運行如下命令:
1>qmake -o Makefile "INCLUDEPATH+=D:\MySQL\lib\include" "LIBS+=D:\MySQL\lib\lib\opt\LIBMYSQL.a" mysql.pro
2>mingw32-make
發(fā)現(xiàn)錯誤了。不太清楚怎么回事(應(yīng)該可以,好好試試)。但是
這樣:在mysql.pro(在C:\Qt\4.3.2\src\plugins\sqldrivers\mysql下面)中加入:
INCLUDEPATH+="C:\Program Files\MySQL\MySQL Server 5.1\include"
LIBS+="C:\Program Files\MySQL\MySQL Server 5.1\lib\opt\libmysql.lib"
保存并退出

6.按照下圖所以執(zhí)行命令:如果你的qmake不能用,那把qt目錄下的bin目錄加入到PATH中去,我是這樣做的。不知道有沒有科學(xué)性。呵呵

注意目錄的進入就好了。然后兩條命令就行了。編譯個半分鐘吧。
7.然后你就會發(fā)現(xiàn)在C :\Qt\4.3.4\qt\plugins\sqldrivers下多了四個文件:當(dāng)然看你安裝qt的版本 qsqlmysql4.dll libqsqlmysql4.a qsqlmysqld4.dll libqsqlmysqld4.a
這樣基本就沒啥問題了。記得打開mysql,它自帶了test數(shù)據(jù)庫,可以用它做測試,順便我建立了一張表格:
那么就開始測試吧。代碼如下:(我的是eclipse配置的qt環(huán)境)
QSqlDatabase TB = QSqlDatabase::addDatabase("QMYSQL");// becomes the new default conne
TB.setHostName("127.0.0.1");//主機名
TB.setDatabaseName("test");//數(shù)據(jù)庫名
TB.setPort(3306);//端口號
TB.setUserName("root");//用戶名
TB.setPassword("123");//密碼
if(TB.open())
m_r_acount->setText("OK");
QSqlQuery query(TB);
QString result[100];
int i = 0;
if(TB.open()){
m_r_acount->setText("OK");
bool check = query.exec("SELECT * FROM tt");
if(!query.isActive())
m_r_acount->setText("HH");
if (!check)
{
m_r_acount->setText("FAIL");
TB.close();
}
while(query.next())
{
result[i] = query.value(i).toString();
i++;
}
m_acount->setText(result[1]);
query.clear();
TB.close();
}
else
m_r_acount->setText("NO");
最后搞定了。
唉,一開始用sqlite就不爽偶的很。最后還是改回這個,但是早晚都會用sqlite,android,很多都用的。騰訊也用。所以早晚搞定它,F(xiàn)在這樣吧。其實還有很多不同的編譯方法,比如用qt直接編譯。
|