?? dialog.cpp
字號(hào):
#include <QtGui>#include "dialog.h"//!使用0毫秒定時(shí)器方式請(qǐng)打開下面的宏定義//#define USET_TIME_EVENTDialog::Dialog(QWidget *parent) : QDialog(parent){ isStop = false; loadSize = 4*1024; totalBytes = 0; bytesWritten = 0; bytesToWrite = 0; tempBuf.resize(0); progressBar = new QProgressBar; statusLabel = new QLabel(tr("請(qǐng)首先點(diǎn)擊打開按鈕選擇一個(gè)文件!")); saveButton = new QPushButton(tr("保存")); quitButton = new QPushButton(tr("退出")); openButton = new QPushButton (tr("打開")); stopButton = new QPushButton(tr("終止")); saveButton->setEnabled(false); stopButton->setEnabled(false); buttonBox = new QDialogButtonBox; buttonBox->addButton(saveButton, QDialogButtonBox::ActionRole); buttonBox->addButton(openButton, QDialogButtonBox::ActionRole); buttonBox->addButton(stopButton, QDialogButtonBox::ActionRole); buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole); connect(saveButton, SIGNAL(clicked()), this, SLOT(saveFile())); connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); connect(openButton, SIGNAL(clicked()), this, SLOT(openFile())); connect(stopButton, SIGNAL(clicked()), this, SLOT(stop())); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(progressBar); mainLayout->addWidget(statusLabel); mainLayout->addStretch(1); mainLayout->addSpacing(10); mainLayout->addWidget(buttonBox); setLayout(mainLayout); setWindowTitle(tr("處理強(qiáng)烈事件"));}void Dialog::saveFile(){ rFile = new QFile(fileName); if (!rFile->open(QFile::ReadOnly )) { QMessageBox::warning(this, tr("程序"), tr("無(wú)法讀取文件 %1:\n%2.") .arg(fileName) .arg(rFile->errorString())); return; } currentFile = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1); wFile = new QFile(currentFile); if (!wFile->open(QFile::WriteOnly )) { QMessageBox::warning(this, tr("程序"), tr("無(wú)法寫文件 %1:\n%2.") .arg(currentFile) .arg(wFile->errorString())); return; } totalBytes = rFile->size(); bytesToWrite = totalBytes; statusLabel->setText(tr("就緒")); #ifdef USET_TIME_EVENT timeId = startTimer(0); #else doCopy(); #endif}void Dialog::doCopy(){ while(bytesToWrite >0) { if(isStop){ rFile->close(); wFile->close(); wFile->remove(currentFile); progressBar->setMaximum(totalBytes); progressBar->setValue(0); statusLabel->setText(tr("終止")); saveButton->setEnabled(false); stopButton->setEnabled(false); qApp->processEvents(); return; }else{ tempBuf = rFile->read(qMin(bytesToWrite, loadSize)); wFile->write(tempBuf); bytesWritten += qMin(bytesToWrite, loadSize); bytesToWrite -= qMin(bytesToWrite, loadSize); progressBar->setMaximum(totalBytes); progressBar->setValue(bytesWritten); statusLabel->setText(tr("已拷貝 %1MB") .arg(bytesWritten / (1024 * 1024))); tempBuf.resize(0); qApp->processEvents(); } } rFile->close(); wFile->close();}void Dialog::openFile(){ fileName = QFileDialog::getOpenFileName(this); if (!fileName.isEmpty()) { saveButton->setEnabled(true); stopButton->setEnabled(true); }}void Dialog::stop(){ isStop = true;}void Dialog::timerEvent(QTimerEvent* event){ if(event->timerId() == timeId) { while((bytesToWrite >0) && (!qApp->hasPendingEvents())) { if(isStop){ rFile->close(); wFile->close(); wFile->remove(currentFile); progressBar->setMaximum(totalBytes); progressBar->setValue(0); statusLabel->setText(tr("終止")); saveButton->setEnabled(false); stopButton->setEnabled(false); return; }else{ tempBuf = rFile->read(qMin(bytesToWrite, loadSize)); wFile->write(tempBuf); bytesWritten += qMin(bytesToWrite, loadSize); bytesToWrite -= qMin(bytesToWrite, loadSize); progressBar->setMaximum(totalBytes); progressBar->setValue(bytesWritten); statusLabel->setText(tr("已拷貝 %1MB") .arg(bytesWritten / (1024 * 1024))); tempBuf.resize(0); } } event->accept(); } else{ Dialog::timerEvent(event); }}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -