mirror of
https://gitee.com/Zhaoxin59/my-chat_-client.git
synced 2026-02-14 09:01:50 +08:00
refactor: 大规模调整项目目录结构,将ChatClient和ChatServer整合为Monorepo结构,并分为两个独立文件夹:chatclient/ 和 chatserver/。更新了ChatClient的CMakeLists.txt配置以适配新结构。
This commit is contained in:
126
ChatClient/src/sessiondetailwidget.cpp
Normal file
126
ChatClient/src/sessiondetailwidget.cpp
Normal file
@ -0,0 +1,126 @@
|
||||
#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();
|
||||
}
|
||||
Reference in New Issue
Block a user