這是為女朋友生日而製作的一個小小禮物,女朋友天天吵著要講笑話給她聽。現在好了,直接做一個笑話軟體給她。不過,女人嘛,感性動物,還是喜歡你親口講的!
----------------------------------------------------------------------------------------------------------------
所有原始碼可以通過https://github.com/BoboSp/Joke下載。
----------------------------------------------------------------------------------------------------------------
承接前面兩篇文章:
http://blog.csdn.net/teamossp/article/details/8912789
http://blog.csdn.net/teamossp/article/details/8918996
這是對這個程式的總結文章。
下面只截取部分代碼,講講自己對Qt API的理解以及c++的一些低級錯誤:
1.new and delete.
InternetJoke::InternetJoke(QWidget *parent) : QDialog(parent), joke(new QString), networkAccess(new QNetworkAccessManager(this)), url(new QString("http://www.jokearea.com/")), codec(QTextCodec::codecForName("U-TF8")){ requestHttp (); connect(networkAccess,SIGNAL(finished(QNetworkReply*)) ,this,SLOT(showHttp(QNetworkReply*)));}
類成員指標,使用new初始一個指標,那麼這是程式員在堆上建立的,最後必須delete掉,一般在解構函式裡面,不然就會造成記憶體流失問題,
如果是在一個函數內new的一個local指標,這也是需要手動delete的,這不同於在函數裡面定義的一個對象:
QTextStream textReader(reply);
這是在棧上的,函數結束後會自動回收記憶體。
2.Qt顯示中文
一般需要在main函數裡面添加如下代碼,
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));//按鈕顯示中文不亂碼
而對於含有中文string的類裡,設定textcodec:
QTextStream textReader(&xmlFile); QTextCodec *codec=QTextCodec::codecForName("UTF-8");textReader.setCodec(codec);//轉換顯示中文
3.擷取http步驟
url(new QString("http://www.jokearea.com/")),//初始化列表中 networkAccess->get(QNetworkRequest(QUrl(*url)));connect(networkAccess,SIGNAL(finished(QNetworkReply*)) ,this,SLOT(showHttp(QNetworkReply*)));void class::showHttp (QNetworkReply *reply);//處理http檔案的槽函數