#cpp #qt #файлы
Программа перестаёт реагировать, после того как я начинаю копировать файлы и нажимаю на неё хоть один раз. Как избежать этого? Мой код: void MainWindow::SaveFiles() { if (!ComboBoxLog->currentData().isNull()) { SaveFilesButton->setDisabled(true); Progress->show(); Progress->setMinimum(0); Progress->setMaximum(model->rowCount()-1); Login conn; conn.connOpen(); QSqlQuery* queryAddNote = new QSqlQuery(conn.mydb); QString newDir = ""; for (int i=1;irowCount();i++) { newDir = QString(QDir::currentPath()+"/"+ComboBoxLog->currentText()+"_%1"+"/"+model->index(i,2).data().toString()).arg(QString(QDate::currentDate().toString()).replace(" ","_")); if (QDir(newDir).exists() == false) { QDir().mkpath(newDir); } if (model->index(i,0).data(Qt::DisplayRole).toBool()==true) { QFile::copy(model->index(i,1).data().toString(),newDir+"/"+QFileInfo(model->index(i,1).data().toString()).fileName()); QString sqlQueryAddNote = QString("INSERT INTO data (data,path_to_data,id_log,date_add_log) VALUES ('%1','%2','%3','%4')") .arg(QFileInfo(model->index(i,1).data().toString()).fileName()) .arg(newDir+"/"+QFileInfo(model->index(i,1).data().toString()).fileName()) .arg(ComboBoxLog->currentData().toString()) .arg(QDate::currentDate().toString()); queryAddNote->prepare(sqlQueryAddNote); qDebug()< lastError(); queryAddNote->exec(); Progress->setValue(i); } else { } } conn.connClose(); Progress->hide(); model->clear(); SaveFilesButton->setDisabled(false); TableDisk->setModel(nullptr); MainWindow::TableLogBuilding(); MainTab->setCurrentIndex(1); } else { msgBox.setText("Выберите журнал в ComboBox! Обязательное поле."); msgBox.exec(); return; } return; }
Ответы
Ответ 1
Дело в том, что вы полностью загружаете поток самой формы, и поэтому ее элементы не отвечают: уже идет сохранение файлов. По сути, строение такого приложение весьма примитивно, и в одно и то же время вы можете выполнять лишь один процесс. Поэтому используйте такую вещь, как QThread: он предназначен для создания дополнительных потоков, которые не будут мешать работе формы. PS. На Хабре пишут, что документация в Qt по данному элементу неправильная. Но все равно посмотрите тут и тут.
Комментариев нет:
Отправить комментарий