ПП отображаются в виде выпадающего списка (назн-е)

This commit is contained in:
2025-11-21 14:05:02 +03:00
parent 72438e8257
commit 5bb9816593
14 changed files with 214 additions and 62 deletions

View File

@@ -161,15 +161,16 @@ QTreeWidget::item {
/*Бранчи*/
QTreeWidget::branch:has-siblings:!adjoins-item {
border-image: url(:/resources/icons/vline.png) 0;
}
QTreeWidget::branch:has-siblings:adjoins-item {
border-image: url(:/resources/icons/branch-more.png) 0;
}
QTreeWidget::branch:!has-children:!has-siblings:adjoins-item {
border-image: url(:/resources/icons/branch-end.png) 0;
}
QTreeWidget#treeWidget_AMMforTrainee::branch:!has-children:!has-siblings:adjoins-item {
border-image: none;
}
QTreeWidget::branch:closed:has-children:!has-siblings,
QTreeWidget::branch:closed:has-children:has-siblings {
border-image: none;
@@ -294,7 +295,7 @@ QTabBar QToolButton { /* the scroll buttons are tool buttons */
QListWidget::item {
/*padding: -5px;*/
}
QListWidget {
QListWidget#oneDialogMessenger {
/*background: #ddeeff;*/
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,

View File

@@ -128,6 +128,10 @@ add_library(InstructorsAndTrainees SHARED
tasks/listsubproc.h
tasks/listsubproc.ui
tasks/subprocitemwidget.cpp
tasks/subprocitemwidget.h
tasks/subprocitemwidget.ui
widgets/newversionwidget.cpp
widgets/newversionwidget.h
widgets/newversionwidget.ui

View File

@@ -85,7 +85,7 @@
<string/>
</property>
<property name="pixmap">
<pixmap resource="../resources.qrc">:/resources/icons/circleGray.png</pixmap>
<pixmap resource="../../ServerLMS/ServerLMS.qrc">:/resources/icons/circleGray.png</pixmap>
</property>
</widget>
</item>
@@ -128,7 +128,7 @@
<string>Send</string>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<iconset>
<normaloff>:/resources/icons/sendMsg.png</normaloff>:/resources/icons/sendMsg.png</iconset>
</property>
<property name="iconSize">
@@ -149,7 +149,7 @@
</layout>
</widget>
<resources>
<include location="../resources.qrc"/>
<include location="../../ServerLMS/ServerLMS.qrc"/>
</resources>
<connections/>
</ui>

View File

@@ -8,6 +8,8 @@
OneDialogMessenger::OneDialogMessenger(User userLocalGUI, User userRemote, QWidget *parent):
QListWidget(parent)
{
this->setObjectName("oneDialogMessenger");
this->userLocalGUI = userLocalGUI;
this->userRemote = userRemote;

View File

@@ -30,6 +30,8 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId();
treeWidget = new QTreeWidget();
if(type == TypeListTreeAMMFIM::listForTrainee)
treeWidget->setObjectName("treeWidget_AMMforTrainee");
ui->horizontalLayout_Tree->addWidget(treeWidget);
//connect(treeWidget, &QTreeWidget::currentItemChanged, this, &AMMtasksWidget::on_treeWidgetItemClicked);
@@ -39,8 +41,8 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
preparationTreeWidget();
threadPreparation = new QThread();
taskTreePreparation = new TaskAMMFIMTreePreparation(type);
taskTreePreparation->moveToThread(threadPreparation);
taskTreePreparation = new TaskAMMFIMTreePreparation(type, treeWidget);
//taskTreePreparation->moveToThread(threadPreparation);
threadPreparation->start();
threadPreparation->setPriority(QThread::HighestPriority);
connect(this, &AMMtasksWidget::signal_prepareAMMListItems, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareAMMListItems);
@@ -281,11 +283,14 @@ void AMMtasksWidget::loadTasksAMM(bool flRequestFirst)
void AMMtasksWidget::slot_AMMlistItemsReady(QList<QTreeWidgetItem *> listItems)
{
if(type != TypeListTreeAMMFIM::listForTrainee)
{
//Обновление дерева
treeWidget->clear();
for(QTreeWidgetItem * item : listItems)
treeWidget->addTopLevelItem(item);
}
/*
QTreeWidgetItem * item = treeWidget->topLevelItem(0);

View File

@@ -38,7 +38,7 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
preparationTreeWidget();
threadPreparation = new QThread();
taskTreePreparation = new TaskAMMFIMTreePreparation(type);
taskTreePreparation = new TaskAMMFIMTreePreparation(type, treeWidget);
taskTreePreparation->moveToThread(threadPreparation);
threadPreparation->start();
threadPreparation->setPriority(QThread::HighestPriority);

View File

@@ -152,8 +152,8 @@ void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode)
{
QList<SubProc> list = connectorToServer->getListSubProcForDMCode(dmCode);
if(!list.count())
on_btnAssign_clicked();
/*if(!list.count())
on_btnAssign_clicked();*/
for(SubProc subProc : list)
{
@@ -177,12 +177,12 @@ void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode)
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setCheckState(ColumnsTreeSubProc::clmnSP_title, Qt::Unchecked);
item->setFlags(item->flags() ^ Qt::ItemIsEnabled);
//item->setFlags(item->flags() ^ Qt::ItemIsEnabled);
#ifdef PROJECT_TYPE_DEBUG
treeWidget->addTopLevelItem(item);
#else
item->setFlags(item->flags() ^ Qt::ItemIsEnabled);
#endif
}
}

View File

@@ -0,0 +1,40 @@
#include "subprocitemwidget.h"
#include "ui_subprocitemwidget.h"
SubProcItemWidget::SubProcItemWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::SubProcItemWidget)
{
ui->setupUi(this);
}
SubProcItemWidget::~SubProcItemWidget()
{
delete ui;
}
void SubProcItemWidget::setListSubProc(const QList<SubProc> &list)
{
int totalHeight = 0;
for (SubProc subProc : list)
{/*Подпроцедуры*/
ui->listWidget->addItem(QString("* %1\n [%2]").arg(subProc.getTitle(), subProc.getDmCode()));
//Делаем item невыделяемым
QListWidgetItem* item = ui->listWidget->item(ui->listWidget->count() - 1);
item->setFlags(item->flags() ^ Qt::ItemIsSelectable);
}
//Определяем минимальную высоту списка
for(int row = 0; row < ui->listWidget->count(); ++row)
{
totalHeight += ui->listWidget->sizeHintForRow(row); // Высота каждой строки
totalHeight += 10;
}
// Добавляем отступы фрейма (рамки)
totalHeight += ui->listWidget->frameWidth() * 2;
ui->listWidget->setMaximumHeight(totalHeight);
}

View File

@@ -0,0 +1,25 @@
#ifndef SUBPROCITEMWIDGET_H
#define SUBPROCITEMWIDGET_H
#include <QWidget>
#include "module.h"
namespace Ui {
class SubProcItemWidget;
}
class SubProcItemWidget : public QWidget
{
Q_OBJECT
public:
explicit SubProcItemWidget(QWidget *parent = nullptr);
~SubProcItemWidget();
void setListSubProc(const QList<SubProc>& list);
private:
Ui::SubProcItemWidget *ui;
};
#endif // SUBPROCITEMWIDGET_H

View File

@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SubProcItemWidget</class>
<widget class="QWidget" name="SubProcItemWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_Main">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Subprocedures allowed to be run by the trainee in automatic mode:</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="listWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@@ -1,12 +1,16 @@
#include <QThread>
#include <QDebug>
#include "tasktreepreparation.h"
#include "subprocitemwidget.h"
#include <QLineEdit>
TaskAMMFIMTreePreparation::TaskAMMFIMTreePreparation(TypeListTreeAMMFIM type, QObject *parent) :
TaskAMMFIMTreePreparation::TaskAMMFIMTreePreparation(TypeListTreeAMMFIM type, QTreeWidget* treeWidget, QObject *parent) :
QObject(parent),
flagStop(false),
type(type)
type(type),
treeWidget(treeWidget)
{
qDebug() << "TaskAMMFIMTreePreparation init thread ID " << QThread::currentThreadId();
}
@@ -477,6 +481,9 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QList<TaskAmm
listItemsAll.clear();
//Обновление дерева
treeWidget->clear();
mtxAccess.lock();
this->listTasksAMM = listTasks;
@@ -491,6 +498,9 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QList<TaskAmm
QString status = task.status;
item = new QTreeWidgetItem();
treeWidget->addTopLevelItem(item);
item->setIcon(0, QIcon(":/resources/icons/procedure.png"));
item->setText(ColumnsTreeAMM::clmnAMM_PMorDM, text);
@@ -520,26 +530,22 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QList<TaskAmm
item->setToolTip(0, text);
if(type == TypeListTreeAMMFIM::listForTrainee)
{
for (int j = 0; j < task.listSubProc.count(); j++)
{/*Подпроцедуры*/
SubProc subProc = task.listSubProc.at(j);
//Подпроцедуры
if(task.listSubProc.count())
{
QTreeWidgetItem* itemSubProc = new QTreeWidgetItem();
itemSubProc->setFlags(itemSubProc->flags() ^ Qt::ItemIsSelectable);
itemSubProc->setText(ColumnsTreeAMM::clmnAMM_PMorDM, subProc.getTitle());
itemSubProc->setIcon(ColumnsTreeAMM::clmnAMM_PMorDM, QIcon(":/resources/icons/link.png"));
itemSubProc->setToolTip(ColumnsTreeAMM::clmnAMM_PMorDM, subProc.getTitle());
itemSubProc->setText(ColumnsTreeAMM::clmnAMM_code, subProc.getDmCode());
itemSubProc->setText(ColumnsTreeAMM::clmnAMM_canplay, subProc.getModeListStr());
SubProcItemWidget* itemWidget = new SubProcItemWidget();
itemWidget->setListSubProc(task.listSubProc);
//itemWidget->setAutoFillBackground(true);
item->addChild(itemSubProc);
treeWidget->setItemWidget(itemSubProc, 0, itemWidget);
}
}
listItemsAll.append(item);

View File

@@ -36,7 +36,7 @@ class TaskAMMFIMTreePreparation : public QObject
{
Q_OBJECT
public:
explicit TaskAMMFIMTreePreparation(TypeListTreeAMMFIM type, QObject *parent = nullptr);
explicit TaskAMMFIMTreePreparation(TypeListTreeAMMFIM type, QTreeWidget* treeWidget, QObject *parent = nullptr);
~TaskAMMFIMTreePreparation();
public:
@@ -83,6 +83,8 @@ private:
QMutex mtxAccess;
int countItems = 0;
QTreeWidget* treeWidget;
};
#endif // TASKTREEPREPARATION_H

View File

@@ -34,55 +34,55 @@
<translation>Удалить</translation>
</message>
<message>
<location filename="../tasks/ammtaskswidget.cpp" line="129"/>
<location filename="../tasks/ammtaskswidget.cpp" line="131"/>
<source>actual</source>
<translation>актуально</translation>
</message>
<message>
<location filename="../tasks/ammtaskswidget.cpp" line="135"/>
<location filename="../tasks/ammtaskswidget.cpp" line="137"/>
<source>update required</source>
<translation>требуется обновление</translation>
</message>
<message>
<location filename="../tasks/ammtaskswidget.cpp" line="346"/>
<location filename="../tasks/ammtaskswidget.cpp" line="348"/>
<location filename="../tasks/ammtaskswidget.cpp" line="351"/>
<location filename="../tasks/ammtaskswidget.cpp" line="353"/>
<source>DM code</source>
<translation>DM код</translation>
</message>
<message>
<location filename="../tasks/ammtaskswidget.cpp" line="346"/>
<location filename="../tasks/ammtaskswidget.cpp" line="348"/>
<location filename="../tasks/ammtaskswidget.cpp" line="351"/>
<location filename="../tasks/ammtaskswidget.cpp" line="353"/>
<source>ID</source>
<translation>ID</translation>
</message>
<message>
<location filename="../tasks/ammtaskswidget.cpp" line="346"/>
<location filename="../tasks/ammtaskswidget.cpp" line="348"/>
<location filename="../tasks/ammtaskswidget.cpp" line="351"/>
<location filename="../tasks/ammtaskswidget.cpp" line="353"/>
<source>Procedure AMM</source>
<translation>Процедура AMM</translation>
</message>
<message>
<location filename="../tasks/ammtaskswidget.cpp" line="346"/>
<location filename="../tasks/ammtaskswidget.cpp" line="348"/>
<location filename="../tasks/ammtaskswidget.cpp" line="351"/>
<location filename="../tasks/ammtaskswidget.cpp" line="353"/>
<source>Canplay</source>
<translation>Режимы</translation>
</message>
<message>
<location filename="../tasks/ammtaskswidget.ui" line="144"/>
<location filename="../tasks/ammtaskswidget.cpp" line="346"/>
<location filename="../tasks/ammtaskswidget.cpp" line="348"/>
<location filename="../tasks/ammtaskswidget.cpp" line="351"/>
<location filename="../tasks/ammtaskswidget.cpp" line="353"/>
<source>Status</source>
<translation>Статус</translation>
</message>
<message>
<location filename="../tasks/ammtaskswidget.cpp" line="475"/>
<location filename="../tasks/ammtaskswidget.cpp" line="480"/>
<source>The deletion will be irrevocable.
Delete it anyway?</source>
<translation>Удаление будет безвозвратным.
Всё равно удалить?</translation>
</message>
<message>
<location filename="../tasks/ammtaskswidget.cpp" line="411"/>
<location filename="../tasks/ammtaskswidget.cpp" line="416"/>
<source>Assign this task?</source>
<translation>Назначить эту задачу?</translation>
</message>
@@ -1199,33 +1199,46 @@ Delete it anyway?</source>
<translation>Хорошо</translation>
</message>
</context>
<context>
<name>SubProcItemWidget</name>
<message>
<location filename="../tasks/subprocitemwidget.ui" line="20"/>
<source>Form</source>
<translation>Форма</translation>
</message>
<message>
<location filename="../tasks/subprocitemwidget.ui" line="28"/>
<source>Subprocedures allowed to be run by the trainee in automatic mode:</source>
<translation>Подпроцедуры, которые разрешено выполнять обучаемому в автоматическом режиме:</translation>
</message>
</context>
<context>
<name>TaskAMMFIMTreePreparation</name>
<message>
<location filename="../tasks/tasktreepreparation.cpp" line="502"/>
<location filename="../tasks/tasktreepreparation.cpp" line="576"/>
<location filename="../tasks/tasktreepreparation.cpp" line="667"/>
<location filename="../tasks/tasktreepreparation.cpp" line="512"/>
<location filename="../tasks/tasktreepreparation.cpp" line="582"/>
<location filename="../tasks/tasktreepreparation.cpp" line="673"/>
<source>completed</source>
<translation>выполнена</translation>
</message>
<message>
<location filename="../tasks/tasktreepreparation.cpp" line="507"/>
<location filename="../tasks/tasktreepreparation.cpp" line="581"/>
<location filename="../tasks/tasktreepreparation.cpp" line="672"/>
<location filename="../tasks/tasktreepreparation.cpp" line="517"/>
<location filename="../tasks/tasktreepreparation.cpp" line="587"/>
<location filename="../tasks/tasktreepreparation.cpp" line="678"/>
<source>failed</source>
<translation>неверно</translation>
</message>
<message>
<location filename="../tasks/tasktreepreparation.cpp" line="512"/>
<location filename="../tasks/tasktreepreparation.cpp" line="586"/>
<location filename="../tasks/tasktreepreparation.cpp" line="677"/>
<location filename="../tasks/tasktreepreparation.cpp" line="522"/>
<location filename="../tasks/tasktreepreparation.cpp" line="592"/>
<location filename="../tasks/tasktreepreparation.cpp" line="683"/>
<source>checkup</source>
<translation>на проверке</translation>
</message>
<message>
<location filename="../tasks/tasktreepreparation.cpp" line="517"/>
<location filename="../tasks/tasktreepreparation.cpp" line="591"/>
<location filename="../tasks/tasktreepreparation.cpp" line="682"/>
<location filename="../tasks/tasktreepreparation.cpp" line="527"/>
<location filename="../tasks/tasktreepreparation.cpp" line="597"/>
<location filename="../tasks/tasktreepreparation.cpp" line="688"/>
<source>new</source>
<translation>новая</translation>
</message>