간단하게 파일 입출력에 관련해 구현을 해 볼려고 한다.
QTextEdit 위젯에 쓴 문자열을 파일에 저장하고, 저장한 파일을 바로 불러 올 수 있도록 구현하였다.
저장 방법에는 QDataStream과 QTextStream이 있다고 하는데,
아직 나도 확실히 모르나, QDataStream은 바이너리 데이터를 QTextStream는 텍스트 데이터를 위한 것이라는 것만
알았다.
일단 소스를 보면,
/**********************************************************
FileInOut.h
**********************************************************/
#ifndef FILEINOUT_H
#define FILEINOUT_H
#include
#include
class FileInOut : public QDialog
{
Q_OBJECT
public:
FileInOut(QWidget *parent = 0);
private slots:
void WriteFile();
void ReadFile();
private:
QVBoxLayout *vLayout;
QTextEdit *textEdit;
QHBoxLayout *hLayout;
QPushButton *saveButton;
QPushButton *loadButton;
QPushButton *closeButton;
};
#endif // FILEINOUT_H
/**********************************************************
FileInOut.cpp
**********************************************************/
#include "FileInOut.h"
FileInOut::FileInOut(QWidget *parent) : QDialog(parent)
{
vLayout = new QVBoxLayout;
textEdit = new QTextEdit;
hLayout = new QHBoxLayout;
saveButton = new QPushButton;
loadButton = new QPushButton;
closeButton = new QPushButton;
saveButton->setText("SAVE");
loadButton->setText("LOAD");
closeButton->setText("CLOSE");
textEdit->setGeometry(QRect(10, 10, 200, 200));
saveButton->setGeometry(QRect(10, 220, 60, 40));
loadButton->setGeometry(QRect(80, 220, 60, 40));
closeButton->setGeometry(QRect(150, 220, 60, 40));
hLayout->addWidget(saveButton);
hLayout->addWidget(loadButton);
hLayout->addWidget(closeButton);
vLayout->addWidget(textEdit);
vLayout->addLayout(hLayout);
setLayout(vLayout);
connect(saveButton, SIGNAL(clicked()), this, SLOT(WriteFile()));
connect(loadButton, SIGNAL(clicked()), this, SLOT(ReadFile()));
connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
}
void FileInOut::WriteFile()
{
QFile file("C:\\Qt\\2010.02.1\\test\\FileInOut\\test.txt");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
QString str = textEdit->toPlainText();
out.setVersion(QDataStream::Qt_4_6);
out << str;
}
void FileInOut::ReadFile()
{
QFile file("C:\\Qt\\2010.02.1\\test\\FileInOut\\test.txt");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
QString str;
in.setVersion(QDataStream::Qt_4_6);
in >> str;
textEdit->setText(str);
}
/**********************************************************
main.cpp
**********************************************************/
#include
#include "FileInOut.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
FileInOut *file = new FileInOut;
file->show();
return app.exec();
}
이렇게 구현을 하였으며,
결과 화면은
![](https://t1.daumcdn.net/cfile/tistory/1627DC274BDA244B49)
![](https://t1.daumcdn.net/cfile/tistory/1427DC274BDA244B4A)
![](https://t1.daumcdn.net/cfile/tistory/1627DC274BDA244C4B)
이렇게 결과를 볼 수 있다.
먼저 Hello QT!!를 적은 뒤 SAVE를 누르게 되면, 저장이 되는데, 두번째 그림을 보게 되면,
없던 파일이 생겨난 것을 볼 수 있다.
그리고 LOAD를 시키면 저장 시킨 값이 출력되는 것을 확인 하였다.
간단한 소스 분석을 하면,
QFile file("C:\\Qt\\2010.02.1\\test\\FileInOut\\test.txt");
저장이나 읽어올 파일 지정
file.open(QIODevice::WriteOnly);
어떤 식으로 파일 열것인가를 결정하는 것으로 여기에서는 오직 읽거나 쓰는 것으로 사용하였다.
QDataStream out(&file);
데이터를 저장할 때 이진화로 데이터를 구조화해 저장
QString str = textEdit->toPlainText();
textEdit 위젯에 쓰여진 문자열을 저장 하고,
out.setVersion(QDataStream::Qt_4_6);
QDataStream의 버젼을 정해 준다.
out << str;
c++의 cout 처럼 사용하여 저장