로재의 개발 일기
메모장
이전에는 [QT] 메모장을 만들어보자 -1
에서 UI를 작성하였습니다.
이제 본격적으로 약간의 설명을 덧 붙인 뒤에 코드를 첨부하겠습니다.
QString..?
1 2 3 4 5 6 | QString i; // current file's number QString total; // number of files to process QString fileName; // current file's name QString status = QString("Processing file %1 of %2: %3") .arg(i).arg(total).arg(fileName); | cs |
QString은 QT에서 제공하는 String 라이브러리이며, QString의 인자는 99개까지 가능합니다.
즉, 위의 코드에서 보다시피 %1 %2 %3가 존재하는데 이는 뒤에 나오는 .arg()를 통해서 정의를 하여
QString 함수를 통해서 status에 문자열이 문자열이 생성이 가능합니다.
QFileDialog..?
1 2 3 4 5 | dir = QFileDialog::getExistingDirectory(); dir.setFilter(QDir::Files | QDir::NoSymLinks); ui->listDir->clear(); list = dir.entryInfoList(); | cs |
QFileDialog dir을 통해서 현재 파일의 위치를 받아오며
setFilter를 통해서 예외 파일들을 제외한 파일들의 목록을
list로 받아옵니다.
QFileInfo
1 2 3 4 5 6 7 | list = dir.entryInfoList(); // loop for file print for(int i = 0; i < list.size(); ++i){ QFileInfo fileInfo = list.at(i); ui -> listDir ->addItem(QString("%1").arg(fileInfo.fileName())); } | cs |
list에 필터를 통한 파일들의 목록이 들어가게 됩니다. (QFileInfoList list)
이 list에 있는 파일 목록들을 QFileInfo fileInfo에 하나씩 넣어주고
이것을 ui에 하나 씩 추가해줍니다.
QFile.open
1 2 3 4 5 6 7 8 | // get filename to absolute path filename = QString("%1").arg(list.at(ui->listDir->currentIndex().row()).absoluteFilePath()); QFile file(filename); file.open(QIODevice::ReadOnly); // textFile clear and print file list ui->textFile->clear(); ui->textFile->append(file.readAll()); | cs |
filename에 사용자가 지정한 파일을 QString 형식으로 받아옵니다.
받아온 파일의 절대 위치를 QFile의 file에 넣어주고
읽기 전용으로 열고 이 파일의 내용을 textFile (오른쪽 파일 수정 및 작성 textEdit)에 전체를 붙여줍니다.
Qfile.write
1 2 3 4 5 | QByteArray bytearray = ui->textFile->toPlainText().toUtf8().left(ui->textFile->toPlainText().length()); file.open(QIODevice::WriteOnly); file.write(bytearray); file.close(); | cs |
QByteArray는 QT에서 제공하는 배열로 메모리 효율이 char *보다 뛰어납니다.
이 배열에 우리가 작성한 textFile 내용을 UTF8 형식으로 인코딩을 시킨 이후
위에서 열은 file에 write 합니다.
코드 첨부
1 2 | QDir dir; QFileInfoList list; | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | void MainWindow::on_pushButton_exit_clicked() { // close window this ->close(); } void MainWindow::on_pushButton_select_clicked() { // show exisiting directory dir = QFileDialog::getExistingDirectory(); dir.setFilter(QDir::Files | QDir::NoSymLinks); ui->listDir->clear(); list = dir.entryInfoList(); // loop for file print for(int i = 0; i < list.size(); ++i){ QFileInfo fileInfo = list.at(i); ui -> listDir ->addItem(QString("%1").arg(fileInfo.fileName())); } } void MainWindow::on_pushButton_open_clicked() { QString path, filename; // get filename to absolute path filename = QString("%1").arg(list.at(ui->listDir->currentIndex().row()).absoluteFilePath()); QFile file(filename); file.open(QIODevice::ReadOnly); // textFile clear and print file list ui->textFile->clear(); ui->textFile->append(file.readAll()); file.close(); QMessageBox msgbox; msgbox.setText("File Opened"); msgbox.exec(); } void MainWindow::on_pushButton_save_clicked() { QString path, filename; // get filename to absolute path filename = QString("%1").arg(list.at(ui->listDir->currentIndex().row()).absoluteFilePath()); // add .text QFile file(filename + ".text"); // Insert into the array after encoding. QByteArray bytearray = ui->textFile->toPlainText().toUtf8().left(ui->textFile->toPlainText().length()); file.open(QIODevice::WriteOnly); file.write(bytearray); file.close(); QMessageBox msgbox; msgbox.setText("File Saved"); msgbox.exec(); } | cs |
관련글
1.Qdir : https://doc.qt.io/qt-5/qdir.html
2.QString : https://doc.qt.io/qt-5/qstring.html
3. QFileDialog : https://doc.qt.io/qt-5/qfiledialog.html#getExistingDirectory
4. QFileInfo : https://doc.qt.io/qt-5/qfileinfo.html
5 .QByteArray : https://doc.qt.io/qt-5/qbytearray.html#details
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
'C_C++ 프로그래밍 > QT' 카테고리의 다른 글
[QT] 메모장을 만들어 보자 -1 (0) | 2019.06.22 |
---|---|
[QT] 간단한 계산기를 만들어보자 -2 (0) | 2019.06.21 |
[QT] 간단한 GUI 계산기 만들어보자 -1 (0) | 2019.06.21 |
[QT] QT 5.10 리눅스에서 설치하기! (0) | 2019.06.07 |
댓글