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

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

@@ -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();