⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainwindow.cpp

📁 多线程下载工具,程序源码,对想开发类似快车或蚂蚁的朋友有用!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		totalSize->setText(QString::number(total_size)+" bytes");	}		totalProgress->setRange(0, nzblist.totalParts());}void MainWindow::loadFile(const QString &fileName){	QFile f(fileName);	nzblist.importNzb(&f);		if (config->value("list/autosort").toBool()) {		sortList();	} else {		populateList();	}			if (nzblist.getList()->count()) {		startAct->setEnabled(true);		streamAct->setEnabled(true);	}	statusBar()->showMessage( tr("Loaded nzb document %1").arg(fileName), 2000 );}void MainWindow::sortList(){	l->clear();	l->setRowCount(0);	l->setHorizontalHeaderLabels((QStringList)"Subject" << "Progress" << "Parts" << "Size");	nzblist.sortList();		populateList();}void MainWindow::start(){	startAct->setEnabled(false);	stopAct->setEnabled(true);	streamAct->setEnabled(false);		for (int i=0; i<downloaders.size(); i++) {		downloaders[i]->start(QThread::LowPriority);	}		decoders[0]->start();		output->setStream(false);	output->start(QThread::TimeCriticalPriority);}void MainWindow::stop(){	startAct->setEnabled(true);	stopAct->setEnabled(false);	streamAct->setEnabled(true);		qDebug("Stopping");		emit fullStop();		for (int i=0; i<downloaders.size(); i++) {		downloaders[i]->wait();	}		decoders[0]->wait();		//output->wait();		clearData();}void MainWindow::clearData(){	l->clear();	l->setRowCount(0);	l->setHorizontalHeaderLabels((QStringList)"Subject" << "Progress" << "Parts" << "Size");		nzblist.clearList();		totalSize->setText("0 MB");	totalProgress->setRange(0,1);	totalProgress->setValue(0);		startAct->setEnabled(false);	streamAct->setEnabled(false);}void MainWindow::stream(){	startAct->setEnabled(false);	stopAct->setEnabled(true);	streamAct->setEnabled(false);		for (int i=0; i<downloaders.size(); i++) {		downloaders[i]->start(QThread::LowPriority);	}		decoders[0]->start();	output->setStream(true);	output->start(QThread::TimeCriticalPriority);}void MainWindow::options(){	OptionsDlg *dl = new OptionsDlg(this);	dl->show();}void MainWindow::downloadEvent(QString message, int row, int type){	if (type == 0) {		d->model()->setData(d->model()->index(row, 1), message);	} else if (type == 2) {		l->model()->setData(l->model()->index(row, 1), (l->item(row, 1)->text()).toInt()+1);		totalProgress->setValue(totalProgress->value() + 1);				if (l->item(row, 1)->text() == "1") {			if (config->value("list/hidecompleted").toBool()) {				l->scrollToItem(l->item(row, 1));			}		}				emit processDecoder();			} else if (type == 3) {		d->model()->setData(d->model()->index(row, 1), message);	} else if (type == 4) {		d->model()->setData(d->model()->index(row, 2), message+" kB/s");				int total_speed = 0;		for (int i=0; i<downloaders.size(); i++) {			QString cur_speed = d->item(i, 2)->text();			total_speed += cur_speed.mid(0, cur_speed.length() - 5).toInt();		}		totalSpeed->setText(QString::number(total_speed)+" kB/s");	}}void MainWindow::decodeEvent(QString message, int row, int type){	d->model()->setData(d->model()->index(row, 1), message);		if (type == 1) {		emit processOutput();	} else if (type == 2) {		QTimer::singleShot(1000, decoders[0], SLOT(processFiles()));	} else if (type == 3) {		QTimer::singleShot(0, output, SLOT(process()));	}}void MainWindow::outputEvent(QString message, int type){	if (type == 1) {		QTimer::singleShot(200, this, SLOT(stop()));	} else if (type == 2) {		QTimer::singleShot(200, this, SLOT(stop()));		QMessageBox *msgbox = new QMessageBox("nzb Error", message, QMessageBox::Critical, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);		msgbox->show();	}}OptionsDlg::OptionsDlg(QWidget *parent) : QDialog(parent){	ui.setupUi(this);	this->parent = parent;	        	connect(ui.okButton, SIGNAL(clicked()), this, SLOT(accept()));	connect(ui.cancelButton, SIGNAL(clicked()), this, SLOT(reject()));		connect(ui.saveBrowse, SIGNAL(clicked()), this, SLOT(browseSave()));	connect(ui.mediaBrowse, SIGNAL(clicked()), this, SLOT(browseMedia()));		connect(ui.subfolders, SIGNAL(stateChanged(int)), this, SLOT(enableGuess(int)));	connect(ui.ssl, SIGNAL(stateChanged(int)), this, SLOT(sslChange(int)));	connect(ui.use_file, SIGNAL(clicked()), this, SLOT(useFile()));		QSettings *config = ((MainWindow*)parent)->getConfig();		if (QFile::exists("nzb.ini")) {		ui.use_file->setEnabled(false);	}		#ifndef Q_WS_WIN	ui.use_file->setEnabled(false);	#endif		ui.host->setText(config->value("server/host").toString());	ui.port->setText(config->value("server/port").toString());	ui.username->setText(config->value("server/username").toString());	ui.password->setText(config->value("server/password").toString());	ui.connections->setValue(config->value("server/connections").toInt());		if (config->value("server/auth").toBool()) {		ui.auth->setCheckState(Qt::Checked);	} else {		ui.auth->setCheckState(Qt::Unchecked);	}	if (config->value("server/ssl").toBool()) {		ui.ssl->setCheckState(Qt::Checked);	} else {		ui.ssl->setCheckState(Qt::Unchecked);	}			if (config->value("list/autosort").toBool()) {		ui.autosort->setCheckState(Qt::Checked);	} else {		ui.autosort->setCheckState(Qt::Unchecked);	}		if (config->value("list/hidecompleted").toBool()) {		ui.hidecompleted->setCheckState(Qt::Checked);	} else {		ui.hidecompleted->setCheckState(Qt::Unchecked);	}		if (config->value("list/par_uncheck").toBool()) {		ui.par_uncheck->setCheckState(Qt::Checked);	} else {		ui.par_uncheck->setCheckState(Qt::Unchecked);	}		ui.savepath->setText(config->value("output/savepath").toString());	if (config->value("output/subfolders").toBool()) {		ui.subfolders->setCheckState(Qt::Checked);		ui.guessalbum->setEnabled(true);	} else {		ui.subfolders->setCheckState(Qt::Unchecked);		ui.guessalbum->setEnabled(false);	}	if (config->value("output/guessalbum").toBool()) {		ui.guessalbum->setCheckState(Qt::Checked);	} else {		ui.guessalbum->setCheckState(Qt::Unchecked);	}	ui.mediaplayer->setText(config->value("output/mediaplayer").toString());	if (config->value("output/stream").toBool()) {		ui.stream->setCheckState(Qt::Checked);	} else {		ui.stream->setCheckState(Qt::Unchecked);	}}void OptionsDlg::accept(){	QSettings *config = ((MainWindow*)parent)->getConfig();	config->setValue("server/host", ui.host->text());	config->setValue("server/port", ui.port->text().toInt());	config->setValue("server/username", ui.username->text());	config->setValue("server/password", ui.password->text());	config->setValue("server/connections", ui.connections->value());	config->setValue("server/auth", ((ui.auth->checkState() == Qt::Checked) ? true : false));	config->setValue("server/ssl", ((ui.ssl->checkState() == Qt::Checked) ? true : false));		config->setValue("list/autosort", ((ui.autosort->checkState() == Qt::Checked) ? true : false));	config->setValue("list/hidecompleted", ((ui.hidecompleted->checkState() == Qt::Checked) ? true : false));	config->setValue("list/par_uncheck", ((ui.par_uncheck->checkState() == Qt::Checked) ? true : false));		config->setValue("output/savepath", ui.savepath->text());	config->setValue("output/subfolders", ((ui.subfolders->checkState() == Qt::Checked) ? true : false));	config->setValue("output/guessalbum", ((ui.guessalbum->checkState() == Qt::Checked) ? true : false));	config->setValue("output/mediaplayer", ui.mediaplayer->text());	config->setValue("output/stream", ((ui.stream->checkState() == Qt::Checked) ? true : false));			config->sync();		close();}void OptionsDlg::reject(){	close();}void OptionsDlg::browseSave(){	QString dir = QFileDialog::getExistingDirectory(this, "Choose a save directory", "", QFileDialog::DontResolveSymlinks);	if (dir != "") {		ui.savepath->setText(dir);	}}void OptionsDlg::browseMedia(){	#ifdef WIN32	QString dir = QFileDialog::getOpenFileName(this, "Choose media player", "", "Executables (*.exe);;All Files (*)");	#else	QString dir = QFileDialog::getOpenFileName(this, "Choose media player", "", "All Files (*)");	#endif	if (dir != "") {		ui.mediaplayer->setText("\""+dir+"\"");	}}void OptionsDlg::enableGuess(int state){	if (state == Qt::Checked) {		ui.guessalbum->setEnabled(true);	} else {		ui.guessalbum->setEnabled(false);	}	}void OptionsDlg::sslChange(int state){	if (state == Qt::Checked) {		ui.port->setText("563");	} else {		ui.port->setText("119");	}	}void OptionsDlg::useFile(){	QSettings *config = new QSettings("nzb.ini", QSettings::IniFormat);	((MainWindow*)parent)->setConfig(config);	config->sync();	ui.use_file->setEnabled(false);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -