Перенес формирование Item ов в отдельный поток

This commit is contained in:
krivoshein
2025-01-23 17:54:21 +03:00
parent 2ab543d6eb
commit d6c78ba428
9 changed files with 166 additions and 5 deletions

View File

@@ -3,6 +3,7 @@
#include <QDomDocument>
#include <QMessageBox>
#include <QThread>
#include <QResizeEvent>
#include "ammtaskswidget.h"
#include "ui_ammtaskswidget.h"
@@ -24,6 +25,20 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa
ui->btnAssignTaskToTrainee->setEnabled(false);
qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId();
threadPreparation = new QThread();
taskTreePreparation = new TaskTreePreparation();
taskTreePreparation->moveToThread(threadPreparation);
threadPreparation->start();
threadPreparation->setPriority(QThread::HighestPriority);
connect(this, &AMMtasksWidget::signal_prepareListItems, taskTreePreparation, &TaskTreePreparation::slot_prepareListItems);
connect(taskTreePreparation, &TaskTreePreparation::signal_listItemsReady, this, &AMMtasksWidget::slot_listItemsReady);
waitAnimationWidget = new WaitAnimationWidget;
QMovie *movie = new QMovie(":/resources/icons/762.gif");
waitAnimationWidget->setParent(this);
waitAnimationWidget->initialize(movie,this);
waitAnimationWidget->moveToThread(threadPreparation);
}
AMMtasksWidget::~AMMtasksWidget()
@@ -32,6 +47,12 @@ AMMtasksWidget::~AMMtasksWidget()
delete ui;
}
void AMMtasksWidget::resizeEvent(QResizeEvent *event)
{
QSize size = event->size();
waitAnimationWidget->resize(size);
}
void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
if(current == nullptr)
@@ -85,10 +106,26 @@ void AMMtasksWidget::loadTasksAMM()
//Обновление дерева
treeWidget->clear();
waitAnimationWidget->showWithPlay();
QByteArray array = connectorToServer->getListTaskAmmArray();
loadAMMtasksFromXML(array);
fillTree();
//fillTree();
signal_prepareListItems(listAllModules);
}
void AMMtasksWidget::slot_listItemsReady(QList<QTreeWidgetItem *> listItems)
{
//Обновление дерева
treeWidget->clear();
for(QTreeWidgetItem * item : listItems)
{
treeWidget->addTopLevelItem(item);
}
waitAnimationWidget->hideWithStop();
}
void AMMtasksWidget::domElementParser(QDomElement element, Module* moduleParent)
@@ -258,11 +295,12 @@ void AMMtasksWidget::fillTree()
for(Module* module : listAllModules)
{
addModuleToTreeWidget(module);
QTreeWidgetItem* item = addModuleToTreeWidget(module);
treeWidget->addTopLevelItem(item);
}
}
void AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* parentItem)
QTreeWidgetItem* AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* parentItem)
{
QTreeWidgetItem* itemModule = nullptr;
@@ -276,7 +314,8 @@ void AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* pare
}
else
{
itemModule = new QTreeWidgetItem(treeWidget);
//itemModule = new QTreeWidgetItem(treeWidget);
itemModule = new QTreeWidgetItem();
}
if(module->getType() == ModuleType::TYPE_PM)
@@ -301,6 +340,8 @@ void AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* pare
itemModule->setText(ColumnsTree::clmn_PMorDM, text);
itemModule->setText(ColumnsTree::clmn_ID, ID);
return itemModule;
}