Skip to content

Commit 1e9e5fc

Browse files
committed
Сделал рефакторинг, написал комментарии.
1 parent aa1d4bf commit 1e9e5fc

32 files changed

+1103
-1622
lines changed

AppIcon.rc

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
QT += core gui
2+
3+
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
4+
5+
TARGET = HuffmanCoding
6+
TEMPLATE = app
7+
8+
9+
SOURCES += main.cpp\
10+
choose.cpp \
11+
encoding.cpp \
12+
decoding.cpp \
13+
huffman.cpp \
14+
guiutils.cpp
15+
16+
HEADERS += choose.h \
17+
encoding.h \
18+
decoding.h \
19+
huffman.h \
20+
guiutils.h
21+
22+
FORMS += choose.ui \
23+
encoding.ui \
24+
decoding.ui
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#include "choose.h"
2+
#include "ui_choose.h"
3+
#include "encoding.h"
4+
#include "decoding.h"
5+
6+
// Конструктор:
7+
Choose::Choose(QWidget *parent) :
8+
QDialog(parent),
9+
ui(new Ui::Choose)
10+
{
11+
ui->setupUi(this);
12+
13+
// Связать клик на кнопку "Сжать данные" с методом showCompressDialog():
14+
connect(ui->compressButton, SIGNAL(clicked()), this, SLOT(showCompressDialog()));
15+
16+
// Связать клик на кнопку "Восстановить данные" с методом showDecompressDialog():
17+
connect(ui->decompressButton, SIGNAL(clicked()), this, SLOT(showDecompressDialog()));
18+
}
19+
20+
// Деструктор:
21+
Choose::~Choose()
22+
{
23+
delete ui;
24+
}
25+
26+
// Показать диалоговое окно для сжатия данных:
27+
void Choose::showCompressDialog()
28+
{
29+
// Диалоговое окно для сжатия данных:
30+
Encoding* en = new Encoding(this);
31+
// Если в конструктор передавать указатель на родительский виджет,
32+
// то диалоговое окно будет отцентрировано относительно родителя.
33+
34+
// Делаем размеры диалогового окна не изменяемыми:
35+
en->setFixedSize(en->size());
36+
37+
en->setWindowTitle("Сжати данных по алгоритму Хаффмана");
38+
39+
// Показать диалоговое окно:
40+
en->exec();
41+
}
42+
43+
// Показать диалоговое окно для восстановления данных:
44+
void Choose::showDecompressDialog()
45+
{
46+
// Диалоговое окно для восстановления данных:
47+
Decoding* de = new Decoding(this);
48+
// Если в конструктор передавать указатель на родительский виджет,
49+
// то диалоговое окно будет отцентрировано относительно родителя.
50+
51+
// Делаем размеры диалогового окна не изменяемыми:
52+
de->setFixedSize(de->size());
53+
54+
de->setWindowTitle("Восстановление данных сжатых по алгоритму Хаффмана");
55+
56+
// Показать диалоговое окно:
57+
de->exec();
58+
}

choose.h renamed to Huffman-algorithm-implementation-in-Qt/choose.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
/***********************************************
2-
Copyright (c) 2012 Piyush Kant
3-
See the file license.txt for copying permission.
4-
************************************************/
5-
61
#ifndef CHOOSE_H
72
#define CHOOSE_H
83

@@ -12,19 +7,26 @@ namespace Ui {
127
class Choose;
138
}
149

10+
// Главное диалоговое окно приложения:
1511
class Choose : public QDialog
1612
{
1713
Q_OBJECT
1814

1915
public:
16+
// Конструктор:
2017
explicit Choose(QWidget *parent = 0);
18+
19+
// Деструктор:
2120
~Choose();
2221

2322
private:
2423
Ui::Choose *ui;
2524

2625
private slots:
26+
// Показать диалоговое окно для сжатия данных:
2727
void showCompressDialog();
28+
29+
// Показать диалоговое окно для восстановления данных:
2830
void showDecompressDialog();
2931
};
3032

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>Choose</class>
4+
<widget class="QDialog" name="Choose">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>300</width>
10+
<height>200</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>Сжатие и восстановление данных</string>
15+
</property>
16+
<property name="windowIcon">
17+
<iconset>
18+
<normaloff>:/images/icon.png</normaloff>:/images/icon.png</iconset>
19+
</property>
20+
<widget class="QPushButton" name="compressButton">
21+
<property name="geometry">
22+
<rect>
23+
<x>20</x>
24+
<y>20</y>
25+
<width>256</width>
26+
<height>64</height>
27+
</rect>
28+
</property>
29+
<property name="text">
30+
<string>Сжать данные</string>
31+
</property>
32+
</widget>
33+
<widget class="QPushButton" name="decompressButton">
34+
<property name="geometry">
35+
<rect>
36+
<x>20</x>
37+
<y>110</y>
38+
<width>256</width>
39+
<height>64</height>
40+
</rect>
41+
</property>
42+
<property name="text">
43+
<string>Восстановить данные</string>
44+
</property>
45+
</widget>
46+
</widget>
47+
<layoutdefault spacing="6" margin="11"/>
48+
<resources/>
49+
<connections/>
50+
</ui>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#include "decoding.h"
2+
#include "ui_decoding.h"
3+
#include "QFileDialog"
4+
#include "guiutils.h"
5+
6+
// Конструктор:
7+
Decoding::Decoding(QWidget *parent) :
8+
QDialog(parent),
9+
ui(new Ui::Decoding)
10+
{
11+
ui->setupUi(this);
12+
13+
// Связать кнопку "Обзор…" с методом browseInputFile():
14+
connect(ui->browseButton, SIGNAL(clicked()), this, SLOT(browseInputFile()));
15+
16+
// Связать кнопку "Восстановить данные" с методом decompressFile():
17+
connect(ui->decodeButton, SIGNAL(clicked()), this, SLOT(decompressFile()));
18+
}
19+
20+
// Деструктор:
21+
Decoding::~Decoding()
22+
{
23+
delete ui;
24+
}
25+
26+
// Метод для выбора файла для восстановления:
27+
void Decoding::browseInputFile()
28+
{
29+
// Открыть диалоговое окно для выбора файла:
30+
inputFileName = QFileDialog::getOpenFileName(this,
31+
tr("Открыть файл"),
32+
QString(),
33+
tr("Бинарные файлы (*.bin)"));
34+
35+
ui->inputFile->setText(inputFileName);
36+
}
37+
38+
// Восстановить сжатый файл:
39+
void Decoding::decompressFile()
40+
{
41+
// Если имя файла пустое:
42+
if (inputFileName == "")
43+
{
44+
showDoneMessage("Пожалуйста, выберите файл.", "Восстановление данных");
45+
}
46+
47+
// Иначе, если имя файла есть:
48+
else
49+
{
50+
// Имя файла:
51+
QByteArray byteArray = inputFileName.toUtf8();
52+
const char* inputFile = byteArray.constData();
53+
54+
// Сжать файл:
55+
huffmanDecode(inputFile);
56+
}
57+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#ifndef DECODING_H
2+
#define DECODING_H
3+
4+
#include <QDialog>
5+
#include "huffman.h"
6+
7+
namespace Ui {
8+
class Decoding;
9+
}
10+
11+
class Decoding : public QDialog
12+
{
13+
Q_OBJECT
14+
15+
public:
16+
17+
// Конструктор:
18+
explicit Decoding(QWidget *parent = 0);
19+
20+
// Деструктор:
21+
~Decoding();
22+
23+
// Получить имя входного файла:
24+
QString getInputFileName();
25+
26+
private:
27+
28+
// Пользовательский интерфейс:
29+
Ui::Decoding *ui;
30+
31+
// Имя входного файла:
32+
QString inputFileName;
33+
34+
public slots:
35+
36+
// Метод для выбора файла для восстановления:
37+
void browseInputFile();
38+
39+
// Восстановить сжатый файл:
40+
void decompressFile();
41+
};
42+
43+
#endif // DECODING_H
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>Decoding</class>
4+
<widget class="QDialog" name="Decoding">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>500</width>
10+
<height>79</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>Dialog</string>
15+
</property>
16+
<property name="windowIcon">
17+
<iconset>
18+
<normaloff>:/images/icon.png</normaloff>:/images/icon.png</iconset>
19+
</property>
20+
<widget class="QPushButton" name="decodeButton">
21+
<property name="geometry">
22+
<rect>
23+
<x>10</x>
24+
<y>40</y>
25+
<width>475</width>
26+
<height>23</height>
27+
</rect>
28+
</property>
29+
<property name="text">
30+
<string>Восстановить данные</string>
31+
</property>
32+
</widget>
33+
<widget class="QLineEdit" name="inputFile">
34+
<property name="geometry">
35+
<rect>
36+
<x>10</x>
37+
<y>10</y>
38+
<width>401</width>
39+
<height>20</height>
40+
</rect>
41+
</property>
42+
<property name="text">
43+
<string/>
44+
</property>
45+
</widget>
46+
<widget class="QPushButton" name="browseButton">
47+
<property name="geometry">
48+
<rect>
49+
<x>420</x>
50+
<y>10</y>
51+
<width>64</width>
52+
<height>23</height>
53+
</rect>
54+
</property>
55+
<property name="text">
56+
<string>Обзор…</string>
57+
</property>
58+
</widget>
59+
</widget>
60+
<resources/>
61+
<connections/>
62+
</ui>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#include "encoding.h"
2+
#include "ui_encoding.h"
3+
#include "QFileDialog"
4+
#include "guiutils.h"
5+
6+
// Конструктор:
7+
Encoding::Encoding(QWidget *parent) :
8+
QDialog(parent),
9+
ui(new Ui::Encoding)
10+
{
11+
ui->setupUi(this);
12+
13+
// Связать кнопку "Обзор…" с методом browseInputFile():
14+
connect(ui->browseButton, SIGNAL(clicked()), this, SLOT(browseInputFile()));
15+
16+
// Связать кнопку "Сжать данные" с методом compressFile():
17+
connect(ui->encodeButton, SIGNAL(clicked()), this, SLOT(compressFile()));
18+
}
19+
20+
// Деструктор:
21+
Encoding::~Encoding()
22+
{
23+
delete ui;
24+
}
25+
26+
// Метод для выбора файла для сжатия:
27+
void Encoding::browseInputFile()
28+
{
29+
// Открыть диалоговое окно для выбора файла:
30+
inputFileName = QFileDialog::getOpenFileName(this,
31+
tr("Открыть файл"),
32+
QString(),
33+
tr("Текстовые файлы (*.txt)"));
34+
35+
ui->inputFile->setText(inputFileName);
36+
}
37+
38+
// Метод для сжатия файла:
39+
void Encoding::compressFile()
40+
{
41+
// Если имя файла пустое:
42+
if (inputFileName == "")
43+
{
44+
showDoneMessage("Пожалуйста, выберите файл.", "Сжатие данных");
45+
}
46+
47+
// Иначе, если имя файла есть:
48+
else
49+
{
50+
// Имя файла:
51+
QByteArray byteArray = inputFileName.toUtf8();
52+
const char* inputFile = byteArray.constData();
53+
54+
// Сжать файл:
55+
huffmanEncode(inputFile);
56+
}
57+
}

0 commit comments

Comments
 (0)