From Gossip@caterpillar

Qt3 Gossip: QTextEdit - 簡單的純文字讀取

這 個程式基本上只是綜合了之前所介紹過的幾個元件,像是QVBox、QPushButton、QFileDialog等等,在元件的使用上並沒有什麼,我只 是想用它來作接下來的主題的開場,在Qt中其實並不只有圖形化的視窗元件好用,一些I/O、繪圖、網路等等好用的API在Qt也有提供,在這個例子中將會 使用到的是QFile與QTextStream,程式中簡單的使用這兩個類別,就可以很輕易的達到開啟檔案的動作。

首先編輯simreader.h:
  • simreader.h
#ifndef SIMREAD_H
#define SIMREAD_H

#include <qvbox.h>

class QTextEdit;
class QPushButton;

class SimReader : public QVBox {
Q_OBJECT

public:
SimReader(QWidget *parent = 0, const char *name = 0);

protected:
QTextEdit *output;
QPushButton *openButton;

protected slots:
void readTextFile();

};

#endif


再來編輯simreader.cpp:
  • simreader.cpp
#include "simreader.h"
#include <qfiledialog.h>
#include <qtextedit.h>
#include <qfile.h>
#include <qtextstream.h>
#include <qpushbutton.h>

SimReader::SimReader(QWidget *parent, const char *name)
:QVBox(parent, name) {

output = new QTextEdit(this);
openButton = new QPushButton("Open", this);

connect(openButton, SIGNAL(clicked()),
this, SLOT(readTextFile()));
resize(320, 240);
}

void SimReader::readTextFile() {
QString s = QFileDialog::getOpenFileName(
"/home", "Text files (*.txt);;Any files(*.*)",
0, "open file dialog Choose a file" );
QFile file(s); // Read the text from a file

if (file.open(IO_ReadOnly)) {
setCaption(s);
QTextStream stream(&file);
output->setText(stream.read());
}
}

最後是主函式main.cpp:
  • main.cpp
#include "simreader.h"
#include <qapplication.h>

int main(int argc, char **argv) {
QApplication app(argc, argv);

SimReader reader;
app.setMainWidget(&reader);

reader.show();

return app.exec();
}

這個程式的元件配置相信對您現在來說應該不難,主要新看到的兩個類別就是QFile與QTextStream類別,目前先不打算解釋這兩個類別,如果您C ++學的不得,其實單看這兩個類別的名稱,就可以知道它是在作什麼,這部份我們之後會有專門主題來介紹它們,您可以先自行查閱Qt的線上說明文件,有關於 這兩個類別的說明。

QTextEdit類別可以用來編輯單一頁的文字,基上上不限於純文字的編輯,還可以編輯字型、顏色等等RichText;setText()指定QTextEdit的顯示文字內容,目前我們先介紹到這邊,更多的方法與編輯樣式設定,以後有機會再來探討。

以下是這個程式開啟一個C++原始檔的畫面: