class MyThread : public QThread{public:virtual void run();};
void Linux_Comander::progress_bar(QString begin_path, QString end_path){ MyThread run; QWidget *dialog_progress = new QWidget; progres = new QProgressBar(this); progres_all = new QProgressBar(this); QVBoxLayout *main_layt = new QVBoxLayout; QVBoxLayout *progress = new QVBoxLayout; QVBoxLayout *progress_all = new QVBoxLayout; QVBoxLayout *path_l = new QVBoxLayout; QVBoxLayout *path_r = new QVBoxLayout; QHBoxLayout *buttons = new QHBoxLayout; QLabel *path = new QLabel; QLabel *path_f = new QLabel; QPushButton *button_cancel = new QPushButton; button_cancel->setText("Закрыть"); button_cancel->setFont(QFont("",8,72,false)); buttons->addWidget(button_cancel); buttons->setContentsMargins(150,1,150,1); progres->setAlignment(Qt::AlignHCenter); progres_all->setAlignment(Qt::AlignHCenter); progress->addWidget(progres); progress_all->addWidget(progres_all); path_l->addWidget(path); path_r->addWidget(path_f); main_layt->addLayout(path_l); main_layt->addLayout(path_r); main_layt->addLayout(progress); main_layt->addLayout(progress_all); main_layt->addLayout(buttons); dialog_progress->setGeometry((x/2)-(450/2),(y/2)-(150/2),450,150); dialog_progress->setWindowModality(Qt::ApplicationModal); dialog_progress->setStyleSheet("background-color: #CCCCCF"); dialog_progress->setWindowTitle("Копирование"); dialog_progress->setFixedSize(450,150); dialog_progress->setLayout(main_layt); dialog_progress->show(); path->setText(begin_path); path_f->setText(end_path); QFile file,f; file.setFileName(model_l->filePath(ui->left_pole->currentIndex())); file.open(QIODevice::ReadOnly); f.setFileName(line_finish->text()+"/"+model_l->fileName(ui->left_pole->currentIndex())); f.open(QIODevice::WriteOnly); progres->setMaximum(file.size()); while (!file.atEnd()) { f.write(file.readLine()); run.start(QThread::HighPriority); run.wait(); } connect(button_cancel,SIGNAL(clicked()),dialog_progress,SLOT(close()));}
void MyThread::run(){ qDebug() << "asdasd";}
class Thread : public QThread{ Q_OBJECTsignals: void signalForProgressBar(int);public: Thread(const QString ©From, const QString ©To, QObject *parent = 0); ~Thread();protected: void run();private: QString m_from; QString m_to;};
Thread::Thread(const QString ©From, const QString ©To, QObject *parent) : QThread(parent), m_from(copyFrom), m_to(copyTo){}Thread::~Thread(){}void Thread::run(){ //тут копируешь, у тебя есть откуда копировать m_from и куда m_to //по мере копирования эммитиш сигнал emit signalForProgressBar(i);}
void Linux_Comander::progress_bar(QString begin_path, QString end_path)//функция отображения хода копирования{//динамическое создание диалога со всем небходимым QWidget *dialog_progress = new QWidget;//основной виджет QProgressBar *progres = new QProgressBar;//прогресс бар первый QProgressBar *progres_all = new QProgressBar;//прогресс бар общий QVBoxLayout *main_layt = new QVBoxLayout;//вертикальный лаут QVBoxLayout *progress = new QVBoxLayout;//вертикальный лаут QVBoxLayout *progress_all = new QVBoxLayout;//вертикальный лаут QVBoxLayout *path_l = new QVBoxLayout;//вертикальный лаут QVBoxLayout *path_r = new QVBoxLayout;//вертикальный лаут QHBoxLayout *buttons = new QHBoxLayout;//горизонтальный лаут QLabel *path = new QLabel;//лайблы QLabel *path_f = new QLabel;// QPushButton *button_cancel = new QPushButton;//кнопка button_cancel->setText("Закрыть");//текст на кнопке button_cancel->setFont(QFont("",8,72,false));//шрифт на кнопке buttons->addWidget(button_cancel);//присваеваем лауту виджет кнопки buttons->setContentsMargins(150,1,150,1);//установливаем поля progres->setAlignment(Qt::AlignHCenter);//выравниваем текст на прогресс баре посередине progres_all->setAlignment(Qt::AlignHCenter);//на втором тоже progress->addWidget(progres);//присваиваем лауту виджет пргресс бара progress_all->addWidget(progres_all);//и воторого то же path_l->addWidget(path);//присваиваем лауту виджет лабла path_r->addWidget(path_f);//и второго //присваиваем основному лауту все лауты main_layt->addLayout(path_l); main_layt->addLayout(path_r); main_layt->addLayout(progress); main_layt->addLayout(progress_all); main_layt->addLayout(buttons); dialog_progress->setGeometry((x/2)-(450/2),(y/2)-(150/2),450,150);//устанавливаем диалог в центре экрана dialog_progress->setWindowModality(Qt::ApplicationModal);//делаем окно модальным dialog_progress->setStyleSheet("background-color: #CCCCCF");//цвет диалога dialog_progress->setWindowTitle("Копирование");//заголовок dialog_progress->setFixedSize(450,150);//фиксированый размер dialog_progress->setLayout(main_layt);//ресайз основного лаута dialog_progress->show();//показываем его path->setText("Из: "+begin_path);//лайблам присваиваем текст path_f->setText("В: "+end_path);//второму тоже MyThread(str.trimmed(),str1.trimmed(),0).start(QThread::HighPriority);// запускает второй поток в котором происходит копирование файлов connect(button_cancel,SIGNAL(clicked()),dialog_progress,SLOT(close()));//при нажатии на кнопку закрыть, закрыть диалог}
MyThread::MyThread(const QString ©From, const QString ©To, QObject *parent) : QThread(parent), m_from(copyFrom), m_to(copyTo){ }void MyThread::run(){ QFile file,f; int i = 0; file.setFileName(m_from);//присваеваем переменной file имя файла на диске qDebug() << file.fileName(); qDebug() << file.open(QIODevice::ReadOnly);//открываем его на чтение f.setFileName(m_to);//аналогично предыдущему qDebug() << f.fileName(); qDebug() << f.open(QIODevice::WriteOnly);//на запись while (!file.atEnd())//запускаем цикл в котором файл копируется построчно { f.write(file.readLine());//построчное записывание emit signalForProgressBar(i); i++; }}MyThread::~MyThread(){ if (!isRunning()) return; wait();}
void MyWindow::on_progress(int progress){ ui->progressBar->setValue(progress);}
connect(CopyProgress, SIGNAL(progress(int)), this, SLOT(on_progress(int)));
SIGNAL(progress(int))
...path->setText("Из: "+begin_path);//лайблам присваиваем текст path_f->setText("В: "+end_path);//второму тоже MyThread *tr; connect (tr,SIGNAL(signalForProgressBar(int)),this,SLOT(progress_signal(int))); MyThread(begin_path.trimmed(),end_path.trimmed()).start(QThread::HighPriority);// запускает второй поток в котором отображается ход копирования connect(button_cancel,SIGNAL(clicked()),dialog_progress,SLOT(close()));//при нажатии на кнопку закрыть, закрыть диалог
path->setText("Из: "+begin_path);//лайблам присваиваем текст path_f->setText("В: "+end_path);//второму тоже MyThread *tr = new MyThread(begin_path.trimmed(),end_path.trimmed()); connect (tr,SIGNAL(signalForProgressBar(int)),this,SLOT(progress_signal(int))); //MyThread(begin_path.trimmed(),end_path.trimmed()).start(QThread::HighPriority);// запускает второй поток в котором отображается ход копирования tr->start(QThread::HighPriority); connect(button_cancel,SIGNAL(clicked()),dialog_progress,SLOT(close()));//при нажатии на кнопку закрыть, закрыть диалог
no matching function for call to 'progress_view::progress_view()'
#ifndef PROGRESS_VIEW_H#define PROGRESS_VIEW_H#include "QThread"#include "QFile"class progress_view : public QThread{ Q_OBJECTsignals: void on_progress(int progress);public: explicit progress_view(const QString ©From, const QString ©To, QObject *parent = 0); QString m_from,m_to;protected: void run();};#endif // PROGRESS_VIEW_H
#include "progress_view.h"progress_view::progress_view(const QString ©From, const QString ©To, QObject *parent) : QThread(parent), m_from(copyFrom), m_to(copyTo){}void progress_view::run(){ QFile file,f; int i = 0; file.setFileName(m_from);//присваеваем переменной file имя файла на диске file.open(QIODevice::ReadOnly);//открываем его на чтение f.setFileName(m_to);//аналогично предыдущему f.open(QIODevice::WriteOnly);//на запись while (!file.atEnd())//запускаем цикл в котором файл копируется построчно { f.write(file.readLine());//построчное записывание emit on_progress(i); i++; } exec();}
Linux_Comander::Linux_Comander(QWidget *parent) : QMainWindow(parent),ui(new Ui::Linux_Comander){ ui->setupUi(this); connect(&p_bar,SIGNAL(on_progress(int)),this,SLOT(progress_signal(int)));...
progress_view(begin_path,end_path,0); p_bar.start();
model_l = new QFileSystemModel(this); model_r = new QFileSystemModel(this); model_l->setRootPath("C:/"); model_r->setRootPath("D:/"); ui->left_pole->setModel(model_l);//установка qtreeview в соответствиис моделью. ui->right_pole->setModel(model_r);