This commit is contained in:
xyz
2025-05-23 20:25:45 +08:00
parent f529ecb251
commit bf3bd5a2ba
5 changed files with 86 additions and 10 deletions

View File

@ -1,9 +1,8 @@
#include "sessionfriendarea.h"
#include <QScrollBar>
#include <QVBoxLayout>
#include <QPushButton>
#include <QGridLayout>
#include <QLabel>
#include "debug.h"
#include "model/data.h"
SessionFriendArea::SessionFriendArea(QWidget *parent)
: QScrollArea {parent}
@ -20,7 +19,7 @@ SessionFriendArea::SessionFriendArea(QWidget *parent)
container->setFixedWidth(310);
this->setWidget(container);
//给这个widget添加布局管理器方便后续添加元素进去
//给这个widget添加布局管理器方便后续添加元素进去
QVBoxLayout* layout = new QVBoxLayout();
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
@ -34,16 +33,78 @@ SessionFriendArea::SessionFriendArea(QWidget *parent)
// btn->setText(Sbtn);
// layout->addWidget(btn);
// }
//构造一些临时数据作为界面调试的依据
#if TEST_UI
QIcon icon(":/resource/image/defaultAv.png");
for(int i = 0; i < 30; i++) {
this->addItem(icon, "xyz" + QString::number(i), "test: last message..." + QString::number(i));
}
// LOG() << "hello world!";
#endif
}
SessionFriendItem::SessionFriendItem(QWidget* owner, const QIcon& avatar, const QString& name, const QString& text)
:owner(owner)
{
this->setFixedHeight(70);
this->setStyleSheet("QWidget { background-color: rgb(231, 231, 231); }");
//创建网格布局管理器
QGridLayout* layout = new QGridLayout();
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
this->setLayout(layout);
//创建头像
QPushButton* avatarBtn = new QPushButton();
avatarBtn->setFixedSize(50, 50);
avatarBtn->setIconSize(QSize(50, 50));
avatarBtn->setIcon(avatar);
avatarBtn->setStyleSheet("QPushButton {border: none;} ");
avatarBtn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
//创建名字
QLabel* nameLabel = new QLabel();
nameLabel->setText(name);
nameLabel->setStyleSheet("QLabel { font-size: 18px; fontweight: 600; }");
nameLabel->setFixedHeight(35);
nameLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
//创建消息预览的label
QLabel* messageLabel = new QLabel();
messageLabel->setText(text);
messageLabel->setStyleSheet("QLabel { font-size: 18px; fontweight: 600; }");
messageLabel->setFixedHeight(35);
messageLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
layout->addWidget(avatarBtn, 0, 0, 2, 2);
layout->addWidget(nameLabel, 0, 2, 1, 1);
layout->addWidget(messageLabel, 1, 2, 1, 1);
}
void SessionFriendArea::clear()
{
QLayout* layout = container->layout();
//遍历布局管理器中的所有元素,依次从布局管理器中删除
for(int i = layout->count() - 1; i >= 0; i--) {
//takeAt就能够移除对应下标的元素,但还需要释放对象
QLayoutItem* item = layout->takeAt(i);
//进行释放
if(item->widget()) {
//把这个移除内容的widget进行释放
delete item->widget();
}
}
}
void SessionFriendArea::addItem(const QIcon &avatar, const QString &name, const QString &text)
{
//构造一个Item
SessionFriendItem* Item = new SessionFriendItem(this, avatar, name, text);
//将Item添加到container中
container->layout()->addWidget(Item);
}