Списки отображаются в виде дерева

This commit is contained in:
2025-11-17 16:10:31 +03:00
parent d280472e1f
commit bd0f52c613
5 changed files with 113 additions and 8 deletions

View File

@@ -15,7 +15,7 @@ DialogListSubProc::DialogListSubProc(ConnectorToServer* connectorToServer, QWidg
layout->addWidget(listSubProc);
this->setWindowTitle(tr("List subprocedures"));
this->setMinimumSize(400, 200);
this->setMinimumSize(1400, 700);
this->setModal(true);
}

View File

@@ -1,3 +1,4 @@
#include <QScrollBar>
#include "listsubproc.h"
#include "ui_listsubproc.h"
@@ -5,10 +6,16 @@ ListSubProc::ListSubProc(ConnectorToServer* connectorToServer, QWidget *parent)
QWidget(parent),
ui(new Ui::ListSubProc),
connectorToServer(connectorToServer),
waitAnimationWidget(nullptr)
waitAnimationWidget(nullptr),
treeWidget(nullptr)
{
ui->setupUi(this);
treeWidget = new QTreeWidget();
ui->horizontalLayout_Tree->addWidget(treeWidget);
preparationTreeWidget();
waitAnimationWidget = new WaitAnimationWidget;
QMovie *movie = new QMovie(":/resources/icons/762.gif");
waitAnimationWidget->setParent(this);
@@ -21,6 +28,7 @@ ListSubProc::~ListSubProc()
{
waitAnimationWidget->hideWithStop();
delete waitAnimationWidget;
delete treeWidget;
delete ui;
}
@@ -31,10 +39,23 @@ void ListSubProc::closeEvent(QCloseEvent *event)
void ListSubProc::resizeEvent(QResizeEvent *event)
{
setWidthColumnsTree();
QSize size = event->size();
waitAnimationWidget->resize(size);
}
void ListSubProc::changeEvent(QEvent *event)
{
// В случае получения события изменения языка приложения
if (event->type() == QEvent::LanguageChange)
{// переведём окно заново
ui->retranslateUi(this);
reSetHeadTreeWidget();
}
}
void ListSubProc::setTask(TaskAmmFim *task)
{
this->task = *task;
@@ -48,6 +69,68 @@ void ListSubProc::setTask(TaskAmmFim *task)
waitAnimationWidget->hideWithStop();
}
void ListSubProc::preparationTreeWidget()
{
treeWidget->setColumnCount(ColumnsTreeSubProc::clmnSP_count);
reSetHeadTreeWidget();
#ifdef PROJECT_TYPE_DEBUG
treeWidget->setColumnHidden(ColumnsTreeSubProc::clmnSP_canplay, false);
#else
treeWidget->setColumnHidden(ColumnsTreeSubProc::clmnSP_canplay, true);
#endif
}
void ListSubProc::reSetHeadTreeWidget()
{
QStringList listHeaders;
listHeaders = QStringList{tr("Subprocedure"), tr("DM code"), tr("Canplay")};
treeWidget->setHeaderLabels(listHeaders);
}
void ListSubProc::setWidthColumnsTree()
{
listWidthColumn.clear();
treeWidget->setColumnWidth(ColumnsTreeSubProc::clmnSP_title, 100);
listWidthColumn.append(100);
treeWidget->setColumnWidth(ColumnsTreeSubProc::clmnSP_code, 250);
listWidthColumn.append(250);
treeWidget->setColumnWidth(ColumnsTreeSubProc::clmnSP_canplay, 50);
listWidthColumn.append(50);
treeWidget->setColumnWidth(ColumnsTreeSubProc::clmnSP_title, calculateWidth_0Column());
}
int ListSubProc::calculateWidth_0Column()
{
int widthHeader = treeWidget->width() - 25;
int width0Column = 0;
int widthSB = 0;
if(treeWidget->verticalScrollBar()->isVisible())
widthSB = treeWidget->verticalScrollBar()->size().width();
int cntColumns = treeWidget->columnCount();
int widthRightColumns = 0;
for (int i = 1; i < cntColumns; i++)
{
if(! treeWidget->isColumnHidden(i))
{//Колонка не скрыта
int w = listWidthColumn.at(i);
widthRightColumns += w;
}
}
width0Column = widthHeader - widthRightColumns - widthSB;
return width0Column;
}
QString ListSubProc::buildCanplay(ModeList modeList)
{
QString canplay = QString("%1/%2/%3/%4").arg(modeList.demo?"+":"-", modeList.train?"+":"-", modeList.exam?"+":"-", modeList.autoM?"+":"-");
return canplay;
}
void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode)
{
if(this->task.ammProcedure.dmCode == dmCode)
@@ -56,7 +139,13 @@ void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode)
for(SubProc subProc : list)
{
ui->listWidget->addItem(subProc.dmCode);
QTreeWidgetItem* item = new QTreeWidgetItem(treeWidget);
item->setIcon(0, QIcon(":/resources/icons/procedure.png"));
item->setText(ColumnsTreeSubProc::clmnSP_title, subProc.title);
item->setText(ColumnsTreeSubProc::clmnSP_code, subProc.dmCode);
item->setText(ColumnsTreeSubProc::clmnSP_canplay, buildCanplay(subProc.modeList));
treeWidget->addTopLevelItem(item);
}
waitAnimationWidget->hideWithStop();

View File

@@ -3,7 +3,15 @@
#include <QWidget>
#include <QResizeEvent>
#include "connectorToServer.h"
#include <QTreeWidget>
#include "connectortoserver.h"
enum ColumnsTreeSubProc{
clmnSP_title = 0,
clmnSP_code,
clmnSP_canplay,
clmnSP_count
};
namespace Ui {
class ListSubProc;
@@ -19,9 +27,17 @@ public:
void closeEvent(QCloseEvent *event) override;
void resizeEvent(QResizeEvent *event) override;
void changeEvent(QEvent * event) override;
void setTask(TaskAmmFim* task);
private:
void preparationTreeWidget();
void reSetHeadTreeWidget();
void setWidthColumnsTree();
int calculateWidth_0Column();
QString buildCanplay(ModeList modeList);
public slots:
void slot_UpdateSubProcForDMCode(QString dmCode);
@@ -33,6 +49,9 @@ private:
TaskAmmFim task;
WaitAnimationWidget *waitAnimationWidget;
QTreeWidget* treeWidget;
QList<int> listWidthColumn;
};
#endif // LISTSUBPROC_H

View File

@@ -44,7 +44,7 @@
</widget>
</item>
<item>
<widget class="QListWidget" name="listWidget"/>
<layout class="QHBoxLayout" name="horizontalLayout_Tree"/>
</item>
</layout>
</item>

View File

@@ -530,9 +530,6 @@ void ProcessingSystem::processingClientQueryListSubProc(ClientHandler *client, Q
QByteArray arrayAnswer = dataParser->getDocsAnswerParser()->listSubProc(list, dmCode);
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM);
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM);
int i = 0;
i++;
}
void ProcessingSystem::processingSendMessage(ClientMessage clientMessage)