-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcopyprocessdialog.cpp
More file actions
123 lines (100 loc) · 3.87 KB
/
Copy pathcopyprocessdialog.cpp
File metadata and controls
123 lines (100 loc) · 3.87 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include "copyprocessdialog.h"
#include "ui_copyprocessdialog.h"
#include "fileutil.h"
#include <QSettings>
const static int PERCENT_COUNT_SIZE = 5;
const static QString KEY_SAVE_AUTO = "SaveAuto";
CopyProcessDialog::CopyProcessDialog(QWidget *parent,FileThread * thread)
: QDialog(parent)
, ui(new Ui::CopyProcessDialog),m_thread(thread)
{
ui->setupUi(this);
this->setVisible(false);
ui->progressBar->setValue(0);
connect(thread,&FileThread::countSizeProcessInd,this,&CopyProcessDialog::on_countSizeProcessInd);
connect(thread,&FileThread::copyProcessInd,this,&CopyProcessDialog::on_copyProcessInd);
QSettings settings;
bool checked = settings.value(KEY_SAVE_AUTO).toBool();
ui->checkBoxAutoClose->setChecked(checked);
copyTpl = ui->labelCopyStat->text();
countTpl = ui->labelCountStat->text();
ui->labelCopyStat->setText("");
ui->labelCountStat->setText("");
}
CopyProcessDialog::~CopyProcessDialog()
{
delete ui;
}
const qint64 LIMIT_SPACE = 1 << 23;
const int LIMIT_COUNT = 3000;
void CopyProcessDialog::ensureShow(int count, qint64 size){
if(count < LIMIT_COUNT && size < LIMIT_SPACE) return;
if(!m_showed){
this->setVisible(true);
m_showed = true;
this->setModal(false);
this->show();
}
}
void CopyProcessDialog::accept()
{
QSettings settings;
settings.setValue(KEY_SAVE_AUTO,QVariant(ui->checkBoxAutoClose->isChecked()));
QDialog::accept();
}
void CopyProcessDialog::on_countSizeProcessInd(int count, int dirCount ,qint64 fileSize, bool bFinished)
{
ensureShow(count,fileSize);
QString sizeStr = FileUtil::sizeFormat(fileSize);
if(bFinished){
m_totalSize = fileSize;
m_totalCount = count;
m_dirCount = dirCount;
ui->progressBar->setValue(PERCENT_COUNT_SIZE);
//统计完成: 文件数%1 目录数%2 文件占用%3
ui->labelCountStat->setText(tr("统计完成: 文件数%1 目录数%2 文件占用%3").arg(count-dirCount).arg(dirCount).arg(sizeStr));
}
else{
int val = ui->progressBar->value();
++ val;
if(val < PERCENT_COUNT_SIZE){
ui->progressBar->setValue(val);
}
//ui->labelStatus->setText("正在统计");
//"正在统计: 文件数%1 目录数%2 文件占用%3"
ui->labelCountStat->setText(tr("正在统计: 文件数%1 目录数%2 文件占用%3").arg(count-dirCount).arg(dirCount).arg(sizeStr));
}
}
const static int SIZE_LIMIT = 1 << 23;//8MB
void CopyProcessDialog::on_copyProcessInd(int copyCount,int dirCount,qint64 fileSize, QString curPath, bool stopped)
{
Q_UNUSED(stopped);
ensureShow(copyCount,fileSize);
QString sizeStr = FileUtil::sizeFormat(fileSize);
if(m_totalSize > SIZE_LIMIT && m_totalCount > copyCount){
int percent = PERCENT_COUNT_SIZE + ((float)fileSize / m_totalSize) * (100 - PERCENT_COUNT_SIZE);
ui->progressBar->setValue(percent);
ui->labelFileName->setText(curPath);
//正在拷贝...:文件数%1 目录数%2 文件占用%3
ui->labelCopyStat->setText(tr("正在拷贝...:文件数 %1 目录数 %2 文件占用 %3").arg(copyCount-dirCount).arg(dirCount).arg(sizeStr));
}
else{
int percent = PERCENT_COUNT_SIZE + ((float)copyCount / m_totalCount) * (100 - PERCENT_COUNT_SIZE);
ui->labelFileName->setText(tr("拷贝文件:") + (curPath));
//拷贝完成:文件数%1 目录数%2 文件占用%3
ui->labelCopyStat->setText(tr("拷贝完成:文件数%1 目录数%2 文件占用%3").arg(copyCount-dirCount).arg(dirCount).arg(sizeStr));
ui->progressBar->setValue(percent);
if(ui->checkBoxAutoClose->isChecked()){
accept();
}
}
}
void CopyProcessDialog::on_pushButtonCancel_clicked()
{
m_thread->doStop();
}
void CopyProcessDialog::on_pushButtonClose_clicked()
{
m_thread->doStop();
accept();
}