본문 바로가기

QT/QT 4.6.2

간단한 파일 입 / 출력 하기!!

간단하게 파일 입출력에 관련해 구현을 해 볼려고 한다.
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();
}



이렇게 구현을 하였으며,
결과 화면은


이렇게 결과를 볼 수 있다.
먼저 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 처럼 사용하여 저장