QT初體驗1:如何學習QT之個人淺見,以及如何讀取文本文件,在調試信息中輸出。
2017年11月初,隨著工作崗位的調動,我轉到了研發崗,開始了漫漫程序員的成長之路。首先介紹下個人知識儲備,大一學習過C語言,沒有工程經驗,所學是為了期末考試+2級考試,考完在大學+碩士期間沒有用到編程。
來到新的工作崗位,心情是既激動又忐忑的,作為一名青銅段位程序員,我得好好規劃下學習、成長的路徑。
我選擇的方法是,跟著項目走,工作中不可能給你大把時光來造作,去把厚厚的C++ Primer or C++ Primer Plus給通讀一遍。帶著任務去學習,學的最快。具體而言,我的學習思路是:
1. 首先,找到一個網站的C++教程(要求必須精簡),大致了解面向對象的思路、類、對象、構造、析構等等各種概念,心中有數即可,練習題都不用做,沒時間啊。有大把時光的學生黨當然還是老老實實地打好基礎,按部就班跟教材走最好。
2. 上述1大概花2天時間搞定,此時可以開始動手了。這個時候推薦QT這個IDE,主要原因是顏值高、自帶assistant、豐富的類庫,帶designer,哪怕你啥都不會,都可以很爽快地在設計界面加上lineEdit寫上自己的大名,做出一個對話框,滿滿的成就感。如我這般初學者上手最好要看到程序輸出結果,用成就感正反饋興趣,才能帶起自己的節奏啊。
3. 跟著網上一個QT的教程,用1-2天時間大致試一試各種功能,一定要將教程的代碼自己敲到IDE中(不建議復制),在這過程中,你會加深對類、對象、指針的印象,有不懂的就問度娘,去找大神的博客學習。
4. 做工程,相比此時你手頭肯定有工作任務,那就順著任務一點一點往下啃吧。
比如,我的第一個工作任務,就是要讀一個文本文件,再存到另一個文件中去。接到這個任務要怎麽考慮呢?
首先,百度“C++如何讀文本文件”,你會看到推薦用“fstream”的各種網頁。讓我們再搜一把“QT如何讀文本文件”,你會看到推薦用“QFile和QTextStream”的各種網頁。對新手來說,肯定選後者啊,先易後難,就跟考試做題一樣,自帶assistant和豐富的example的QT是很好的選擇,值得擁有。
其次,就開始看這兩個類,推薦先別看assistant,因為裏面太詳細了,又有語言關要過,直接先百度找例子,看看大神們寫的最簡單的例子,馬上就可以用了,自己建一個工程,建一個.txt文件,寫上幾行,馬上就能見到效果。
再次,等各種求助、磕磕絆絆把任務給搞定後,別忘了最重要的一步——總結,把你借鑒的知識點變成自己的。什麽樣算變成自己的呢?個人認為有一個標準:在不查各種資料的情況下,能輕易寫出代碼,並給一個如我這般的萌新講清楚。註意,講清楚,並不需要你成為專家,能把assistant裏面所有的知識點都能講解到。學知識講究一個循序漸進,對單個知識點的理解、認識也是逐步加深的,就像當下的深度學習、機器學習,從來沒聽說遍歷第一遍樣本就能學到位的。
===================================================================================================================
那麽回到標題的第二部分:如何讀取文本文件,在調試信息中輸出呢?顯然,這個命題並不難,我也沒有掌握QFile和QTextStream類的所有知識點,但是我會講解到目前11月20日我的理解。
首先,QT提供了非常豐富的C++庫,就文本讀寫而言,使用較多的是QFile和QTextStream這兩個類。
我們首先要將QFile這個類實例化,其方法就是構建一個QFile類的對象,即QFile file(...);
1 QFile file("qingtong.txt");
如上面這行,將建立一個QFile類的對象file,這個file在當前文件夾下的名稱叫做qingtong.txt,我們可以將路徑放在雙引號內:
QFile file("C:/users/qingtong.txt");
文件對象定義好後,要打開它,要用到的是QFile類的成員函數open(),同時一般會定義打開方式和文本格式,一種最常用的方法是:
1 if (!file.open(QFile::ReadOnly|QFile::Text)) 2 { 3 qDebug("%s", qPrintable("Error: Can‘t open this file!")); 4 return a.exec(); 5 }
我對這段代碼的看法是,先知道怎麽用,再去理解代碼每一行是什麽意思,這裏重點是將file.open操作放在if語句後面,在執行open操作後進行一次打開是否成功的判別,如果不成功就會執行括號內的語句,qDebug是一個QT的全局函數,其用法之一是上面這種,用於輸出調試信息的。return a.exec()對應於main函數,上來就會先定義一個QApplication的對象a,這裏返回a.exec(),也可以先不考慮為什麽要這樣做,先讓程序能奔跑起來。
接著,將QTextStream這個類實例化,根據你要做的事(讀in,寫out)來創建對象,例如我現在要讀,那麽:
QTextStream in(&file);
這裏的in是QTextStream的對象,括號內是QFile對象file的引用。
然後就可以開始讀了,QTextStream有一些函數用於規定讀的方式,使用較多的一種方式是調用readLine函數,即一行一行閱讀。例如,我可以用:
1 QString list = in.readLine(); 2 qDebug("%s", qPrintable(list));
這兩行代碼來輸出qingtong.txt文件的第一行內容。其中要註意:readLine前面調用該函數的對象是in,不是file,因為readLine函數是QTextStream類的函數,而不是QFile類的。在網上流傳的某版本readLine用法代碼中出現了這一處小問題,此處予以提示。
通過上面這幾行簡單的代碼,你就可以自己實現一個小程序了,讀出qingtong.txt文件的第一行,輸出到調試信息中。完整代碼如下:
1 #include <QApplication> 2 #include <QFile> 3 #include <QTextStream> 4 #include <QDebug> 5 #include <QString> 6 //頭文件包含,如我這般萌新可以用到什麽類就包含什麽,其實有的類可以不包含,比如後兩個。 7 8 int main(int argc, char *argv[]) 9 { 10 QApplication a(argc, argv); 11 QFile file("C:/users/qingtong.txt"); 12 if(!file.open(QFile::ReadOnly|QFile::Text)) 13 { 14 qDebug("%s", qPrintable("Error: Can‘t open this file!")); 15 return a.exec(); 16 } 17 QTextStream in(&file); 18 QString list = in.readLine(); 19 qDebug("%s", qPrintable(list)); 20 return a.exec(); 21 }
上述代碼很快就實現了一個功能,是不是很簡單呢?接下來要做的就是去不斷擴充功能了,怎麽樣能把所有的文件都讀出來呢?怎麽樣能用文本框輸出呢?怎麽樣能再寫入一個新的文本呢?這些問題能幫助你不斷擴充這一個知識點。
這是第一篇日誌,也是進軍IT界的起點,相信到明年這個時候,再看這篇日誌一定充滿感觸。它將不斷完善,後續有關文件讀寫方面的知識,我都將附上更新時間,加在本篇日誌的後面。
QT初體驗1:如何學習QT之個人淺見,以及如何讀取文本文件,在調試信息中輸出。