/
MainWindow.cpp
93 lines (77 loc) · 2.8 KB
/
MainWindow.cpp
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include "MainWindow.h"
#include "ui_mainwindow.h"
#include "QuickSort.h"
#include "MergeSort.h"
#include "ShellSort.h"
#include "SortThread.h"
#include "SortAlgorithm.h"
MainWindow::MainWindow(QWidget* parent) :
QMainWindow(parent),
method(QUICK),
type(DOUBLE),
ui(new Ui::MainWindow),
alpha("abcdefghijklmnopqrstuvwxyz") {
ui->setupUi(this);
connect(ui->sortButton, SIGNAL(clicked()), this, SLOT(onSortButtonClicked()));
connect(ui->generateButton, SIGNAL(clicked()), this, SLOT(onGenerateButtonClicked()));
connect(ui->clearButton, SIGNAL(clicked()), this, SLOT(onClearButtonClicked()));
connect(ui->sortMethod, SIGNAL(currentIndexChanged(int)), this, SLOT(onSortMethodChanged(int)));
connect(ui->sortType, SIGNAL(currentIndexChanged(int)), this, SLOT(onSortTypeChanged(int)));
connect(ui->numbers, SIGNAL(blockCountChanged(int)), this, SLOT(onNumbersBlockCountChanged(int)));
connect(&sortThread, SIGNAL(end(QString, int)), this, SLOT(onSortEnd(QString, int)));
ui->sortMethod->addItem("Quick");
ui->sortMethod->addItem("Merge");
ui->sortMethod->addItem("Shell");
ui->sortType->addItem("Double");
ui->sortType->addItem("String");
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::onSortButtonClicked() {
ui->sortButton->setEnabled(false);
ui->clearButton->setEnabled(false);
ui->generateButton->setEnabled(false);
ui->numbers->setEnabled(false);
ui->lastTimeLabel->setText("loading...");
ui->sortMethod->setEnabled(false);
ui->sortType->setEnabled(false);
ui->addCount->setEnabled(false);
sortThread.start(ui->numbers->toPlainText(), method, type);
}
void MainWindow::onSortEnd(QString result, int time) {
ui->numbers->setPlainText(result);
ui->sortButton->setEnabled(true);
ui->clearButton->setEnabled(true);
ui->generateButton->setEnabled(true);
ui->numbers->setEnabled(true);
ui->sortMethod->setEnabled(true);
ui->sortType->setEnabled(true);
ui->addCount->setEnabled(true);
ui->lastTimeLabel->setText(QString::number((double) time / 1000) + "sec");
}
void MainWindow::onGenerateButtonClicked() {
int size = ui->addCount->value();
QString text;
for(int i = 0; i < size; i++) {
if(type == DOUBLE)
text += QString::number(qrand() % 1000000);
else
text += alpha[qrand() % alpha.length()];
if(i + 1 < size)
text += "\n";
}
ui->numbers->appendPlainText(text);
}
void MainWindow::onSortMethodChanged(int index) {
method = (SortMethod) index;
}
void MainWindow::onSortTypeChanged(int index) {
type = (SortType) index;
}
void MainWindow::onNumbersBlockCountChanged(int newBlockCount) {
ui->numbersSize->display(newBlockCount);
}
void MainWindow::onClearButtonClicked() {
ui->numbers->clear();
}