QTextEdit


這 個程式基本上只是綜合了之前所介紹過的幾個元件,像是 QVBoxLayoutQPushButtonQFileDialog 等,以及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();
}

下圖為執行時的參考畫面: