This commit is contained in:
2025-12-05 12:20:47 +03:00
parent 57673d0ee4
commit 05fce073f1
450 changed files with 58 additions and 58 deletions

View File

@@ -0,0 +1,143 @@
#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);
ui->lblAvatar->setObjectName("MsgWidgetLblAvatar");
}
MsgWidget::~MsgWidget()
{
delete ui;
}
void MsgWidget::setAligneAvatarLeft()
{
ui->horizontalLayout_Main->removeItem(ui->verticalLayout_Avatar);
ui->horizontalLayout_Main->removeItem(ui->verticalLayout_Text);
ui->horizontalLayout_Main->removeItem(ui->horizontalLayout_Add);
ui->horizontalLayout_EditText->removeItem(ui->horizontalSpacer_EditText);
ui->horizontalLayout_EditText->removeWidget(ui->editText);
ui->horizontalLayout_Main->addLayout(ui->verticalLayout_Avatar);
ui->horizontalLayout_Main->addLayout(ui->verticalLayout_Text);
ui->horizontalLayout_Main->addLayout(ui->horizontalLayout_Add);
ui->horizontalLayout_EditText->addWidget(ui->editText);
ui->horizontalLayout_EditText->addItem(ui->horizontalSpacer_EditText);
ui->editText->setObjectName("MsgWidgetEditTextRemote");
ui->lblTime->setObjectName("MsgWidgetLblTimeRemote");
ui->lblName->setObjectName("MsgWidgetLblNameRemote");
ui->lblTime->setAlignment(Qt::AlignLeft);
ui->lblName->setAlignment(Qt::AlignLeft | Qt::AlignBottom);
//ui->editText->setAlignment(Qt::AlignLeft);
}
void MsgWidget::setAligneAvatarRight()
{
ui->horizontalLayout_Main->removeItem(ui->verticalLayout_Avatar);
ui->horizontalLayout_Main->removeItem(ui->verticalLayout_Text);
ui->horizontalLayout_Main->removeItem(ui->horizontalLayout_Add);
ui->horizontalLayout_EditText->removeItem(ui->horizontalSpacer_EditText);
ui->horizontalLayout_EditText->removeWidget(ui->editText);
ui->horizontalLayout_Main->addLayout(ui->horizontalLayout_Add);
ui->horizontalLayout_Main->addLayout(ui->verticalLayout_Text);
ui->horizontalLayout_Main->addLayout(ui->verticalLayout_Avatar);
ui->horizontalLayout_EditText->addItem(ui->horizontalSpacer_EditText);
ui->horizontalLayout_EditText->addWidget(ui->editText);
ui->editText->setObjectName("MsgWidgetEditTextLocal");
ui->lblTime->setObjectName("MsgWidgetLblTimeLocal");
ui->lblName->setObjectName("MsgWidgetLblNameLocal");
ui->lblTime->setAlignment(Qt::AlignRight);
ui->lblName->setAlignment(Qt::AlignRight | Qt::AlignBottom);
//ui->editText->setAlignment(Qt::AlignRight);
}
void MsgWidget::setAvatar(QString avatar)
{
QPixmap pix(avatar);
ui->lblAvatar->setPixmap( pix.scaled(32,32) );
}
void MsgWidget::setWidth(int width)
{
this->setFixedWidth(width);
widthEdit = width - 200;
}
void MsgWidget::setText(QString text)
{
ui->editText->setText(text);
}
void MsgWidget::setTime(QString timeStr)
{
ui->lblTime->setText(timeStr);
}
void MsgWidget::setName(QString name)
{
ui->lblName->setText(name);
}
void MsgWidget::on_editText_textChanged()
{
QString text = ui->editText->toPlainText();
QFontMetrics metricsFont(ui->editText->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, 1000), Qt::TextWordWrap, text);
if(textRect.width() > widthEdit)
{
QRect textRect1str = metricsFont.boundingRect(QRect(0, 0, widthEdit, 1000), 0, "string");
int ost = textRect.width() % widthEdit;
int cnt = textRect.width() / widthEdit;
//if(ost > 0)
cnt += 1;
this->setFixedHeight(textRect1str.height() * cnt + (ost? textRect1str.height() : 0) + X + 20 + 30 + 30);
ui->editText->setFixedHeight(textRect1str.height() * cnt + (ost? textRect1str.height() : 0) + X);
}
else
{
this->setFixedHeight(textRect.height() + X + 20 + 30 + 30);
ui->editText->setFixedHeight(textRect.height() + X);
}
}
else
{//В одну строку
this->setFixedHeight(textRect.height() + X + 20 + 30 + 30);
ui->editText->setFixedWidth(textRect.width() + X);
ui->editText->setFixedHeight(textRect.height() + X);
}
}