這
個程式基本上只是綜合了之前所介紹過的幾個元件,像是 QVBoxLayout、QPushButton、QFileDialog 等,以及QTextEdit元件來進行文字檔案的讀取與顯示,在Qt中並不只有圖形化的視窗元件,一些I/O、繪圖、網路等API在Qt也有提供,在這個例子中將會
使用到的是QFile與QTextStream,程式中簡單的使用這兩個類別,就可以達到開啟檔案讀取的動作。
首先編輯TxtReader.h:
#ifndef TXT_READER_H #define TXT_READER_H
#include <QWidget>
class QTextEdit; class QPushButton;
class TxtReader : public QWidget { Q_OBJECT
public: TxtReader(QWidget *parent = 0);
protected: QTextEdit *txtEdit; QPushButton *openBtn;
protected slots: void readTxtFile(); };
#endif
在這個標頭檔中,定義了一個Slot,當按下按鈕時,將連接這個Slot來進行檔案讀取的動作,接下來編輯TxtReader.cpp:
#include "TxtReader.h"
#include <QVBoxLayout> #include <QTextEdit> #include <QPushButton> #include <QFont> #include <QFileDialog> #include <QFile> #include <QTextStream>
TxtReader::TxtReader(QWidget *parent) : QWidget(parent) { txtEdit = new QTextEdit; txtEdit->setFont(QFont( "Courier", 12, QFont::Bold ));
openBtn = new QPushButton("Open Text File"); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(txtEdit); layout->addWidget(openBtn); this->setLayout(layout); this->resize(350, 200); connect(openBtn, SIGNAL(clicked()), this, SLOT(readTxtFile())); }
void TxtReader::readTxtFile() { QString fileName = QFileDialog::getOpenFileName(this, "Open Text File", "C:\\", "Text Files (*.txt *.java *.c *.cpp);;All files (*.*)"); QFile file(fileName); if(file.open(QIODevice::ReadOnly)) { this->setWindowTitle(fileName); QTextStream stream(&file); txtEdit->setText(stream.readAll()); } file.close(); }
程式中配置QTextEdit與QPushButton,按下按鈕後clicked()的Signal會連接至自定義的
readTxtFile(),在這當中使用了QFileDialog供使用者選取檔案,而後使用傳回的檔案名稱來用QFile進行開檔,由於將讀取的是文
字檔案,使用QTextStream輔助,可以使用其readAll()方法一次讀進檔案中所有的文字,最後記得使用QFile的close()關閉檔
案。
QTextEdit類別可以用來編輯文字,基本上不限於純文字的編輯,還可以編輯字型、顏色等;setText()指定QTextEdit的顯示文字內容。
接下來編輯主程式:
#include <QApplication> #include "TxtReader.h"
int main(int argc, char *argv[]) { QApplication app(argc, argv);
TxtReader *txtReader = new TxtReader; txtReader->show();
return app.exec(); }
下圖為執行時的參考畫面:

|
|