這 個程式基本上只是綜合了之前所介紹過的幾個元件,像是 QVBoxLayout、QPushButton、QFileDialog 等,以及QTextEdit元件來進行文字檔案的讀取與顯示,在Qt中並不只有圖形化的視窗元件,一些I/O、繪圖、網路等API在Qt也有提供,在這個例子中將會 使用到的是QFile與QTextStream,程式中簡單的使用這兩個類別,就可以達到開啟檔案讀取的動作。
首先編輯TxtReader.h:
- 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:
- 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的顯示文字內容。
接下來編輯主程式:
- main.cpp
#include <QApplication>
#include "TxtReader.h"
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
TxtReader *txtReader = new TxtReader;
txtReader->show();
return app.exec();
}
下圖為執行時的參考畫面: