mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
Переделано под один мега-проект LMS с общим CMakeLists.txt
This commit is contained in:
227
InstructorsAndTrainees/messanger/messangerwidget.cpp
Normal file
227
InstructorsAndTrainees/messanger/messangerwidget.cpp
Normal file
@@ -0,0 +1,227 @@
|
||||
#include <QListWidget>
|
||||
#include <QBrush>
|
||||
#include <QKeyEvent>
|
||||
#include <QAbstractScrollArea>
|
||||
#include <QMessageBox>
|
||||
#include <QLabel>
|
||||
#include "messangerwidget.h"
|
||||
#include "ui_messangerwidget.h"
|
||||
|
||||
|
||||
MessangerWidget::MessangerWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::MessangerWidget),
|
||||
currLogin("")
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
ui->tabWidget->removeTab(1);
|
||||
ui->tabWidget->removeTab(0);
|
||||
|
||||
ui->btnSend->setObjectName("btnSend");
|
||||
}
|
||||
|
||||
MessangerWidget::~MessangerWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void MessangerWidget::addMsgFromClient(Trainee trainee, QString text)
|
||||
{
|
||||
//Пробуем добавить вкладку диалога с клиентом (если вдруг еще нет)
|
||||
addTabDialogMessenger(trainee);
|
||||
|
||||
//Ищем нужный диалог
|
||||
QString login = trainee.getLogin();
|
||||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||||
{//Есть такой
|
||||
if(tabDialog->getLogin() == login)
|
||||
{
|
||||
//Добавляем в существующую вкладку
|
||||
ui->tabWidget->setCurrentIndex(getIndexTab(login));
|
||||
tabDialog->addMsgWidgetRemote(text);
|
||||
//Делаем ее текущей
|
||||
ui->tabWidget->setCurrentIndex(getIndexTab(login));
|
||||
|
||||
currLogin = login;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerWidget::addTabDialogMessenger(Trainee trainee)
|
||||
{
|
||||
if(listTabDialogMessenger.count() == 0)
|
||||
{//Самая первая вкладка, делаем ее активной
|
||||
currLogin = trainee.getLogin();
|
||||
emit signal_tabMessengerChanged(currLogin);
|
||||
}
|
||||
|
||||
//Проверяем наличие диалога с этим клиентом
|
||||
foreach(TabDialogMessenger* dialogMsg, listTabDialogMessenger)
|
||||
{
|
||||
if(dialogMsg->getLogin() == trainee.getLogin())
|
||||
{//Диалог для этого клиента уже существует
|
||||
//Обновляем статус залогинивания
|
||||
if(trainee.getLoggedIn())
|
||||
ui->tabWidget->setTabIcon(getIndexTab(trainee.getLogin()), QIcon(":/resources/icons/circleGreen.png"));
|
||||
else
|
||||
ui->tabWidget->setTabIcon(getIndexTab(trainee.getLogin()), QIcon(":/resources/icons/circleGray.png"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//Диалога для этого клиента еще не существует
|
||||
|
||||
//Помещаем новый диалог в список диалогов
|
||||
TabDialogMessenger* tabDialog = new TabDialogMessenger(0 /*TODO доделать передачу реального ID*/, trainee.getLogin(), this);
|
||||
listTabDialogMessenger.append(tabDialog);
|
||||
|
||||
//Добавляем новую вкладку диалога
|
||||
int index = ui->tabWidget->addTab(tabDialog, /*login + ": " +*/ trainee.getName());
|
||||
|
||||
//Обновляем статус залогинивания
|
||||
if(trainee.getLoggedIn())
|
||||
ui->tabWidget->setTabIcon(index, QIcon(":/resources/icons/circleGreen.png"));
|
||||
else
|
||||
ui->tabWidget->setTabIcon(index, QIcon(":/resources/icons/circleGray.png"));
|
||||
}
|
||||
|
||||
void MessangerWidget::actualizationTabsDialogMessenger()
|
||||
{
|
||||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||||
{
|
||||
QString login = tabDialog->getLogin();
|
||||
bool exist = false;
|
||||
|
||||
for(Trainee trainee : listTrainees)
|
||||
{
|
||||
if(trainee.getLogin() == login)
|
||||
{
|
||||
if(trainee.getArchived())
|
||||
{//Стал архивным
|
||||
//Удаляем диалог с клиентом
|
||||
ui->tabWidget->removeTab(getIndexTab(login));
|
||||
listTabDialogMessenger.removeOne(tabDialog);
|
||||
}
|
||||
else
|
||||
exist = true;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!exist)
|
||||
{//Нет такого логина
|
||||
//Удаляем диалог с клиентом
|
||||
ui->tabWidget->removeTab(getIndexTab(login));
|
||||
listTabDialogMessenger.removeOne(tabDialog);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int MessangerWidget::getIndexTab(QString login)
|
||||
{
|
||||
for(int index = 0; index < ui->tabWidget->count(); index++)
|
||||
{
|
||||
TabDialogMessenger* tabDialogMessenger = static_cast<TabDialogMessenger*>(ui->tabWidget->widget(index));
|
||||
if(tabDialogMessenger->getLogin() == login)
|
||||
return index;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void MessangerWidget::on_btnSend_clicked()
|
||||
{
|
||||
QString text = ui->editMsg->toPlainText();
|
||||
|
||||
emit signal_msgToClientReady(currLogin, text);
|
||||
|
||||
ui->editMsg->clear();
|
||||
|
||||
//Ищем нужный диалог
|
||||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||||
{
|
||||
if(tabDialog->getLogin() == currLogin)
|
||||
{
|
||||
//Добавляем в существующую вкладку
|
||||
tabDialog->addMsgWidgetLocal(text);
|
||||
//Делаем ее активной
|
||||
ui->tabWidget->setCurrentIndex(getIndexTab(currLogin));
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerWidget::on_tabWidget_currentChanged(int index)
|
||||
{
|
||||
//Ищем нужный диалог
|
||||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||||
{
|
||||
if(getIndexTab(tabDialog->getLogin()) == index)
|
||||
{
|
||||
currLogin = tabDialog->getLogin();
|
||||
emit signal_tabMessengerChanged(currLogin);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerWidget::slot_traineeSelected(QString login)
|
||||
{
|
||||
//Ищем нужный диалог
|
||||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||||
{
|
||||
if(tabDialog->getLogin() == login)
|
||||
{
|
||||
//Активируем нужную вкладку
|
||||
ui->tabWidget->setCurrentIndex(getIndexTab(login));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerWidget::slot_LanguageChanged(QString language)
|
||||
{
|
||||
qtLanguageTranslator.load(QString("translationsMy/ServerLMS_") + language, ".");
|
||||
qApp->installTranslator(&qtLanguageTranslator);
|
||||
}
|
||||
|
||||
void MessangerWidget::slot_InitMessanger(QList<Trainee> listTrainees)
|
||||
{
|
||||
this->listTrainees = listTrainees;
|
||||
|
||||
actualizationTabsDialogMessenger();
|
||||
|
||||
for(Trainee trainee: listTrainees)
|
||||
{
|
||||
if(! trainee.getArchived())
|
||||
addTabDialogMessenger(trainee);
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerWidget::slot_msgFromClientReady(QString login, QString text)
|
||||
{
|
||||
for(Trainee trainee: listTrainees)
|
||||
{
|
||||
if(trainee.getLogin() == login)
|
||||
addMsgFromClient(trainee, text);
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerWidget::keyPressEvent(QKeyEvent *event)
|
||||
{
|
||||
if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)
|
||||
{
|
||||
ui->btnSend->click();
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerWidget::changeEvent(QEvent *event)
|
||||
{
|
||||
// В случае получения события изменения языка приложения
|
||||
if (event->type() == QEvent::LanguageChange)
|
||||
{
|
||||
ui->retranslateUi(this); // переведём окно заново
|
||||
}
|
||||
}
|
||||
71
InstructorsAndTrainees/messanger/messangerwidget.h
Normal file
71
InstructorsAndTrainees/messanger/messangerwidget.h
Normal file
@@ -0,0 +1,71 @@
|
||||
#ifndef MESSANGERWIDGET_H
|
||||
#define MESSANGERWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QTranslator>
|
||||
#include <trainee.h>
|
||||
#include "Datas.h"
|
||||
#include "tabdialogmessenger.h"
|
||||
|
||||
|
||||
namespace Ui {
|
||||
class MessangerWidget;
|
||||
}
|
||||
|
||||
//Главный виджет мессенджера
|
||||
|
||||
class MessangerWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MessangerWidget(QWidget *parent = nullptr);
|
||||
~MessangerWidget();
|
||||
|
||||
protected:
|
||||
// Метод получения событий
|
||||
// В нём будет производиться проверка события смены перевода приложения
|
||||
void changeEvent(QEvent * event) override;
|
||||
|
||||
public:
|
||||
enum ETypeMsg{fromClient, toClient};
|
||||
|
||||
void addMsgFromClient(Trainee trainee, QString text);
|
||||
|
||||
void addTabDialogMessenger(Trainee trainee);
|
||||
void actualizationTabsDialogMessenger();
|
||||
|
||||
int getIndexTab(QString login);
|
||||
|
||||
private slots:
|
||||
void on_btnSend_clicked();
|
||||
void on_tabWidget_currentChanged(int index);
|
||||
|
||||
signals:
|
||||
//сигнал о готовности нового сообщения на отправку клиенту
|
||||
void signal_msgToClientReady(QString login, QString text);
|
||||
//сигнал об изменении вкладки диалога с клиентом (TabDialogMessenger)
|
||||
void signal_tabMessengerChanged(QString login);
|
||||
|
||||
public slots:
|
||||
//слот обработки сигнала о смене языка
|
||||
void slot_LanguageChanged(QString language);
|
||||
//слот обработки сигнала об инициализации мессенджера
|
||||
void slot_InitMessanger(QList<Trainee> listTrainees);
|
||||
//слот обработки сигнала о выборе обучаемого
|
||||
void slot_traineeSelected(QString login);
|
||||
//слот о приходе нового сообщения от клиента
|
||||
void slot_msgFromClientReady(QString login, QString text);
|
||||
|
||||
private:
|
||||
virtual void keyPressEvent(QKeyEvent *event) override;
|
||||
|
||||
private:
|
||||
Ui::MessangerWidget *ui;
|
||||
QList <TabDialogMessenger*> listTabDialogMessenger;
|
||||
QList<Trainee> listTrainees;
|
||||
QString currLogin; //Логин клиента текущего диалога
|
||||
QTranslator qtLanguageTranslator;
|
||||
};
|
||||
|
||||
#endif // MESSANGERWIDGET_H
|
||||
153
InstructorsAndTrainees/messanger/messangerwidget.ui
Normal file
153
InstructorsAndTrainees/messanger/messangerwidget.ui
Normal file
@@ -0,0 +1,153 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MessangerWidget</class>
|
||||
<widget class="QWidget" name="MessangerWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>500</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Tahoma</family>
|
||||
<pointsize>10</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Messenger</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="1" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetDefaultConstraint</enum>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QTextEdit" name="editMsg">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Ignored">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>70</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>1000</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QToolButton" name="btnSend">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Ignored" vsizetype="Ignored">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>65</width>
|
||||
<height>58</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>1000</width>
|
||||
<height>1000</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Send</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../resources.qrc">
|
||||
<normaloff>:/resources/icons/sendMsg.png</normaloff>:/resources/icons/sendMsg.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextUnderIcon</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout" stretch="0">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetDefaultConstraint</enum>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
<string>Tab 1</string>
|
||||
</attribute>
|
||||
<widget class="QListWidget" name="listWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>110</x>
|
||||
<y>30</y>
|
||||
<width>256</width>
|
||||
<height>192</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
<attribute name="title">
|
||||
<string>Tab 2</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../resources.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
92
InstructorsAndTrainees/messanger/msgwidget.cpp
Normal file
92
InstructorsAndTrainees/messanger/msgwidget.cpp
Normal file
@@ -0,0 +1,92 @@
|
||||
#include "msgwidget.h"
|
||||
#include "ui_msgwidget.h"
|
||||
|
||||
MsgWidget::MsgWidget(QString avatar, AligneAvatar aligneAvatar, int width, QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::MsgWidget),
|
||||
widthEdit(100)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
setAvatar(avatar);
|
||||
|
||||
if(aligneAvatar == AligneAvatar::Left)
|
||||
setAligneAvatarLeft();
|
||||
else
|
||||
setAligneAvatarRight();
|
||||
|
||||
setWidth(width);
|
||||
}
|
||||
|
||||
MsgWidget::~MsgWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void MsgWidget::setAligneAvatarLeft()
|
||||
{
|
||||
ui->horizontalLayout->removeWidget(ui->textEdit);
|
||||
ui->horizontalLayout->removeItem(ui->verticalLayout);
|
||||
ui->horizontalLayout->removeItem(ui->horizontalLayout_2);
|
||||
|
||||
ui->horizontalLayout->addLayout(ui->verticalLayout);
|
||||
ui->horizontalLayout->addWidget(ui->textEdit);
|
||||
ui->horizontalLayout->addLayout(ui->horizontalLayout_2);
|
||||
|
||||
ui->textEdit->setObjectName("MsgWidgetLocal");
|
||||
}
|
||||
|
||||
void MsgWidget::setAligneAvatarRight()
|
||||
{
|
||||
ui->horizontalLayout->removeWidget(ui->textEdit);
|
||||
ui->horizontalLayout->removeItem(ui->verticalLayout);
|
||||
ui->horizontalLayout->removeItem(ui->horizontalLayout_2);
|
||||
|
||||
ui->horizontalLayout->addLayout(ui->horizontalLayout_2);
|
||||
ui->horizontalLayout->addWidget(ui->textEdit);
|
||||
ui->horizontalLayout->addLayout(ui->verticalLayout);
|
||||
|
||||
ui->textEdit->setObjectName("MsgWidgetRemote");
|
||||
}
|
||||
|
||||
|
||||
void MsgWidget::setAvatar(QString avatar)
|
||||
{
|
||||
QPixmap pix(avatar);
|
||||
ui->label->setPixmap( pix.scaled(32,32) );
|
||||
}
|
||||
|
||||
void MsgWidget::setWidth(int width)
|
||||
{
|
||||
this->setFixedWidth(width);
|
||||
widthEdit = width - 200;
|
||||
}
|
||||
|
||||
void MsgWidget::setText(QString text)
|
||||
{
|
||||
ui->textEdit->setText(text);
|
||||
}
|
||||
|
||||
void MsgWidget::on_textEdit_textChanged()
|
||||
{
|
||||
QString text = ui->textEdit->toPlainText();
|
||||
QFontMetrics metricsFont(ui->textEdit->font()); //метрики шрифта
|
||||
|
||||
//геометрические параметры текста (высота/ширина в пикселях). В одну строку
|
||||
QRect textRect = metricsFont.boundingRect(QRect(0, 0, 0, 0), 0, text);
|
||||
|
||||
int X = 10; // отступы
|
||||
|
||||
if(textRect.width() > widthEdit)
|
||||
{//Не помещается в одну строку
|
||||
textRect = metricsFont.boundingRect(QRect(0, 0, widthEdit, 10), Qt::TextWordWrap, text);
|
||||
ui->textEdit->setFixedHeight(textRect.height() + X);
|
||||
this->setFixedHeight(textRect.height() + X + 20);
|
||||
}
|
||||
else
|
||||
{//В одну строку
|
||||
ui->textEdit->setFixedWidth(textRect.width() + X);
|
||||
ui->textEdit->setFixedHeight(textRect.height() + X);
|
||||
this->setFixedHeight(textRect.height() + X + 20);
|
||||
}
|
||||
}
|
||||
42
InstructorsAndTrainees/messanger/msgwidget.h
Normal file
42
InstructorsAndTrainees/messanger/msgwidget.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#ifndef MSGWIDGET_H
|
||||
#define MSGWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
namespace Ui {
|
||||
class MsgWidget;
|
||||
}
|
||||
|
||||
//Виджет одного сообщения для/от клиента
|
||||
|
||||
class MsgWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum AligneAvatar
|
||||
{
|
||||
Left,
|
||||
Right
|
||||
};
|
||||
|
||||
public:
|
||||
explicit MsgWidget(QString avatar, AligneAvatar aligneAvatar, int width, QWidget *parent = nullptr);
|
||||
~MsgWidget();
|
||||
|
||||
void setAligneAvatarLeft();
|
||||
void setAligneAvatarRight();
|
||||
void setAvatar(QString avatar);
|
||||
void setWidth(int width);
|
||||
|
||||
void setText(QString text);
|
||||
|
||||
private slots:
|
||||
void on_textEdit_textChanged();
|
||||
|
||||
private:
|
||||
Ui::MsgWidget *ui;
|
||||
|
||||
int widthEdit;
|
||||
};
|
||||
|
||||
#endif // MSGWIDGET_H
|
||||
106
InstructorsAndTrainees/messanger/msgwidget.ui
Normal file
106
InstructorsAndTrainees/messanger/msgwidget.ui
Normal file
@@ -0,0 +1,106 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MsgWidget</class>
|
||||
<widget class="QWidget" name="MsgWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>91</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="1" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTextEdit" name="textEdit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QAbstractScrollArea::AdjustIgnored</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Expanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
57
InstructorsAndTrainees/messanger/tabdialogmessenger.cpp
Normal file
57
InstructorsAndTrainees/messanger/tabdialogmessenger.cpp
Normal file
@@ -0,0 +1,57 @@
|
||||
#include <QScrollBar>
|
||||
#include "tabdialogmessenger.h"
|
||||
#include "msgwidget.h"
|
||||
|
||||
|
||||
TabDialogMessenger::TabDialogMessenger(int id, QString login, QWidget *parent):
|
||||
QListWidget(parent),
|
||||
login(""),
|
||||
id(0)
|
||||
{
|
||||
this->id = id;
|
||||
this->login = login;
|
||||
|
||||
setWordWrap(true);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn);
|
||||
}
|
||||
|
||||
TabDialogMessenger::~TabDialogMessenger()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void TabDialogMessenger::addMsgWidgetLocal(QString text)
|
||||
{
|
||||
QListWidgetItem *listWidgetItem = new QListWidgetItem();
|
||||
QString avatar = ":/resources/icons/instructor.png";
|
||||
MsgWidget *msgWidget = new MsgWidget(avatar, MsgWidget::AligneAvatar::Left,
|
||||
width() - verticalScrollBar()->size().width());
|
||||
|
||||
addItem(listWidgetItem);
|
||||
setItemWidget(listWidgetItem, msgWidget);
|
||||
|
||||
msgWidget->setText(text);
|
||||
|
||||
//Корректировка высоты item
|
||||
listWidgetItem->setSizeHint (QSize(10, msgWidget->height()));
|
||||
|
||||
scrollToItem(listWidgetItem);
|
||||
}
|
||||
|
||||
void TabDialogMessenger::addMsgWidgetRemote(QString text)
|
||||
{
|
||||
QListWidgetItem *listWidgetItem = new QListWidgetItem();
|
||||
QString avatar = ":/resources/icons/trainee.png";
|
||||
MsgWidget *msgWidget = new MsgWidget(avatar, MsgWidget::AligneAvatar::Right,
|
||||
width() - verticalScrollBar()->size().width());
|
||||
|
||||
addItem(listWidgetItem);
|
||||
setItemWidget(listWidgetItem, msgWidget);
|
||||
|
||||
msgWidget->setText(text);
|
||||
|
||||
//Корректировка высоты item
|
||||
listWidgetItem->setSizeHint (QSize(10, msgWidget->height()));
|
||||
|
||||
scrollToItem(listWidgetItem);
|
||||
}
|
||||
29
InstructorsAndTrainees/messanger/tabdialogmessenger.h
Normal file
29
InstructorsAndTrainees/messanger/tabdialogmessenger.h
Normal file
@@ -0,0 +1,29 @@
|
||||
#ifndef TABDIALOGMESSENGER_H
|
||||
#define TABDIALOGMESSENGER_H
|
||||
|
||||
#include <QListWidget>
|
||||
|
||||
//Закладка ведения диалога с одним клиентом
|
||||
|
||||
//TODO сделать идентификацию по ID
|
||||
|
||||
class TabDialogMessenger : public QListWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
TabDialogMessenger(int id, QString login, QWidget *parent = nullptr);
|
||||
~TabDialogMessenger();
|
||||
|
||||
QString getLogin() {return login;};
|
||||
int getID() {return id;};
|
||||
|
||||
void addMsgWidgetLocal(QString text);
|
||||
void addMsgWidgetRemote(QString text);
|
||||
|
||||
private:
|
||||
QString login;
|
||||
int id;
|
||||
};
|
||||
|
||||
#endif // TABDIALOGMESSENGER_H
|
||||
Reference in New Issue
Block a user