Files
MyChat_Client/sessiondetailwidget.cpp
2025-09-09 15:37:57 +08:00

126 lines
4.5 KiB
C++

#include "sessiondetailwidget.h"
#include "model/datacenter.h"
using namespace model;
//右上角详情的会话人员列表
AvatarItem::AvatarItem(const QIcon& avatar, const QString& name)
{
// 设置自身的基本属性
this->setFixedSize(70, 80);
// 创建布局管理器
QVBoxLayout* layout = new QVBoxLayout();
layout->setSpacing(0);
layout->setContentsMargins(0, 0, 0, 0);
layout->setAlignment(Qt::AlignHCenter);
this->setLayout(layout);
// 创建头像
avatarBtn = new QPushButton();
avatarBtn->setFixedSize(45, 45);
avatarBtn->setIconSize(QSize(45, 45));
avatarBtn->setIcon(avatar);
avatarBtn->setStyleSheet("QPushButton { border: none; }");
// 创建名字
nameLabel = new QLabel();
nameLabel->setText(name);
QFont font("微软雅黑", 12);
nameLabel->setFont(font);
nameLabel->setAlignment(Qt::AlignCenter);
// 对名字做 "截断操作"
const int MAX_WIDTH = 65;
QFontMetrics metrics(font);
int totalWidth = metrics.horizontalAdvance(name);//测量水平的宽度
if (totalWidth >= MAX_WIDTH) {
// 说明需要截断
QString tail = "...";
int tailWidth = metrics.horizontalAdvance(tail);
int availableWidth = MAX_WIDTH - tailWidth;
int availableSize = name.size() * ((double)availableWidth / totalWidth);
QString newName = name.left(availableSize);
nameLabel->setText(newName + tail);
}
// 添加
layout->addWidget(avatarBtn);
layout->addWidget(nameLabel);
}
SessionDetailWidget::SessionDetailWidget(QWidget *parent, const UserInfo& userInfo)
:userInfo(userInfo),
QDialog(parent)
{
// 1. 设置基本属性
this->setWindowTitle("会话详情");
this->setWindowIcon(QIcon(":/resource/image/logo.png"));
this->setFixedSize(300, 300);
this->setStyleSheet("QWidget { background-color: rgb(255, 255, 255); }");
this->setAttribute(Qt::WA_DeleteOnClose);
// 2. 创建布局管理器
QGridLayout* layout = new QGridLayout();
layout->setSpacing(10);
layout->setContentsMargins(50, 0, 50, 0);
this->setLayout(layout);
// 3. 添加 "创建群聊" 按钮
AvatarItem* createGroupBtn = new AvatarItem(QIcon(":/resource/image/cross.png"), "添加");
layout->addWidget(createGroupBtn, 0, 0);
// 4. 添加当前用户的信息 (临时构造的假数据)
#if TEST_UI
AvatarItem* currentUser = new AvatarItem(QIcon(":/resource/image/defaultAvatar.png"), "张三123456");
layout->addWidget(currentUser, 0, 1);
#endif
AvatarItem* currentUser = new AvatarItem(userInfo.avatar, userInfo.nickname);
layout->addWidget(currentUser, 0, 1);
// 5. 添加 "删除好友" 按钮
deleteFriendBtn = new QPushButton();
deleteFriendBtn->setFixedHeight(50);
deleteFriendBtn->setText("删除好友");
QString style = "QPushButton { border: 1px solid rgb(90, 90, 90); border-radius: 5px; color: rgb(0, 0, 0); } ";
style += "QPushButton:pressed { background-color: rgb(235, 235, 235); }";
deleteFriendBtn->setStyleSheet(style);
layout->addWidget(deleteFriendBtn, 1, 0, 1, 3);
// 6. 添加信号槽, 处理点击 "创建群聊" 按钮
connect(createGroupBtn->getAvatar(), &QPushButton::clicked, this, [=]() {
ChooseFriendDialog* chooseFriendDialog = new ChooseFriendDialog(this, userInfo.userId);
chooseFriendDialog->exec();
});
connect(deleteFriendBtn, &QPushButton::clicked, this, &SessionDetailWidget::clickDeleteFriendBtn);
}
void SessionDetailWidget::clickDeleteFriendBtn() {
//弹出一个对话框让用户确认是否真的删除
//auto result = QMessageBox::warning(this, "确认删除", "确认删除该好友?", QMessageBox::Ok | QMessageBox::Cancel);
QMessageBox msgBox;
msgBox.setWindowTitle("确认删除");
msgBox.setText("确认删除该好友?");
msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
//msgBox.setStyleSheet("QPushButton { color: black; background-color: rgb(255, 255, 255); }");
msgBox.setStyleSheet("QMessageBox { background-color: white; } "
"QLabel { color: black; } "
"QPushButton { color: black; background-color: #E0E0E0; }");
int result = msgBox.exec();
if (result != QMessageBox::Ok) {
LOG() << "用户取消了好友删除";
return;
}
//发送好友删除请求
DataCenter* dataCenter = DataCenter::getInstance();
dataCenter->deleteFriendAsync(this->userInfo.userId);
//关闭当前窗口
this->close();
}