1. 程式人生 > >QT初體驗1:如何學習QT之個人淺見,以及如何讀取文本文件,在調試信息中輸出。

QT初體驗1:如何學習QT之個人淺見,以及如何讀取文本文件,在調試信息中輸出。

沒有 c++教程 最簡 將不 ror 聽說 講解 知識點 括號

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之個人淺見,以及如何讀取文本文件,在調試信息中輸出。