mirror of
https://gitee.com/Zhaoxin59/my-chat_-client.git
synced 2026-02-14 00:51:48 +08:00
add addFriendDialog and promote others
This commit is contained in:
172
addfrienddialog.cpp
Normal file
172
addfrienddialog.cpp
Normal file
@ -0,0 +1,172 @@
|
||||
#include "addfrienddialog.h"
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
//表示一个好友搜索的结果
|
||||
/////////////////////////////////////////
|
||||
FriendResultItem::FriendResultItem(const UserInfo& userInfo)
|
||||
:userInfo(userInfo)
|
||||
{
|
||||
// 1. 设置基本属性
|
||||
this->setFixedHeight(70);
|
||||
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
|
||||
// 2. 创建布局管理器
|
||||
QGridLayout* layout = new QGridLayout();
|
||||
layout->setVerticalSpacing(0);
|
||||
layout->setHorizontalSpacing(10);
|
||||
layout->setContentsMargins(0, 0, 20, 0);
|
||||
this->setLayout(layout);
|
||||
|
||||
// 3. 创建头像
|
||||
QPushButton* avatarBtn = new QPushButton();
|
||||
avatarBtn->setFixedSize(50, 50);
|
||||
avatarBtn->setIconSize(QSize(50, 50));
|
||||
avatarBtn->setIcon(userInfo.avatar);
|
||||
|
||||
// 4. 创建昵称
|
||||
QLabel* nameLabel = new QLabel();
|
||||
nameLabel->setFixedHeight(35); // 整个 Item 高度是 70. 昵称和个性签名各自占一半.
|
||||
nameLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
nameLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
|
||||
nameLabel->setStyleSheet("QLabel { font-size: 16px; font-weight: 700;}");
|
||||
nameLabel->setText(userInfo.nickname);
|
||||
|
||||
// 5. 创建个性签名
|
||||
QLabel* descLabel = new QLabel();
|
||||
descLabel->setFixedHeight(35);
|
||||
descLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
descLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
|
||||
descLabel->setStyleSheet("QLabel { font-size: 14px; }");
|
||||
descLabel->setText(userInfo.description);
|
||||
|
||||
// 6. 创建添加好友按钮
|
||||
addBtn = new QPushButton();
|
||||
addBtn->setFixedSize(100, 40);
|
||||
addBtn->setText("添加好友");
|
||||
QString btnStyle = "QPushButton { border: none; background-color: rgb(137, 217, 97); color: rgb(255, 255, 255); border-radius: 10px;} ";
|
||||
btnStyle += "QPushButton:pressed { background-color: rgb(200, 200, 200); }";
|
||||
addBtn->setStyleSheet(btnStyle);
|
||||
|
||||
// 7. 把上述内容, 添加到布局管理器中
|
||||
layout->addWidget(avatarBtn, 0, 0, 2, 1);
|
||||
layout->addWidget(nameLabel, 0, 1);
|
||||
layout->addWidget(descLabel, 1, 1);
|
||||
layout->addWidget(addBtn, 0, 2, 2, 1);
|
||||
|
||||
// 8. 连接信号槽
|
||||
//connect(addBtn, &QPushButton::clicked, this, &FriendResultItem::clickAddBtn);
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////
|
||||
//整个搜索好友的窗口
|
||||
/////////////////////////////////////////
|
||||
AddFriendDialog::AddFriendDialog(QWidget *parent)
|
||||
: QDialog(parent)
|
||||
{
|
||||
// 1. 设置基本属性
|
||||
this->setFixedSize(500, 500);
|
||||
this->setWindowTitle("添加好友");
|
||||
this->setWindowIcon(QIcon(":/resource/image/logo.png"));
|
||||
this->setStyleSheet("QDialog {background-color: rgb(255, 255, 255); }");
|
||||
this->setAttribute(Qt::WA_DeleteOnClose); // 不要忘记这个属性!!!
|
||||
|
||||
// 2. 添加布局管理器
|
||||
layout = new QGridLayout();
|
||||
layout->setSpacing(10);
|
||||
layout->setContentsMargins(20, 20, 20, 0);
|
||||
this->setLayout(layout);
|
||||
|
||||
// 3. 创建搜索框
|
||||
searchEdit = new QLineEdit();
|
||||
searchEdit->setFixedHeight(50);
|
||||
searchEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
QString style = "QLineEdit { border: none; border-radius: 10px; font-size: 16px; color: rgb(129, 129, 129); background-color: rgb(240, 240, 240); padding-left: 5px;}";
|
||||
searchEdit->setStyleSheet(style);
|
||||
searchEdit->setPlaceholderText("按手机号/用户序号/昵称搜索");
|
||||
layout->addWidget(searchEdit, 0, 0, 1, 8);
|
||||
|
||||
// 4. 创建搜索按钮
|
||||
QPushButton* searchBtn = new QPushButton();
|
||||
searchBtn->setFixedSize(50, 50);
|
||||
searchBtn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
searchBtn->setIconSize(QSize(30, 30));
|
||||
searchBtn->setIcon(QIcon(":/resource/image/search.png"));
|
||||
QString btnStyle = "QPushButton { border: none; background-color: rgb(240, 240, 240); border-radius: 10px; }";
|
||||
btnStyle += "QPushButton:hover { background-color: rgb(220, 220, 220); } QPushButton:pressed { background-color: rgb(200, 200, 200); } ";
|
||||
searchBtn->setStyleSheet(btnStyle);
|
||||
layout->addWidget(searchBtn, 0, 8, 1, 1);
|
||||
|
||||
// 5. 添加滚动区域
|
||||
initResultArea();
|
||||
|
||||
// 构造假的数据, 验证界面效果
|
||||
#if TEST_UI
|
||||
QIcon avatar(":/resource/image/defaultAvatar.png");
|
||||
for (int i = 0; i < 20; ++i) {
|
||||
// new 出来这个对象, 再往 addResult 中添加. FriendResultItem 中持有了 UserInfo 的 const 引用. 需要确保引用是有效的引用
|
||||
UserInfo* userInfo = new UserInfo();
|
||||
userInfo->userId = QString::number(1000 + i);
|
||||
userInfo->nickname = "张三" + QString::number(i);
|
||||
userInfo->description = "这是一段个性签名";
|
||||
userInfo->avatar = avatar;
|
||||
this->addResult(*userInfo);
|
||||
}
|
||||
#endif
|
||||
//
|
||||
// // 6. 连接信号槽
|
||||
// connect(searchBtn, &QPushButton::clicked, this, &AddFriendDialog::clickSearchBtn);
|
||||
|
||||
}
|
||||
|
||||
void AddFriendDialog::initResultArea()
|
||||
{
|
||||
// 1. 创建滚动区域对象
|
||||
QScrollArea* scrollArea = new QScrollArea();
|
||||
scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
scrollArea->setWidgetResizable(true);
|
||||
scrollArea->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal {height: 0;} ");
|
||||
scrollArea->verticalScrollBar()->setStyleSheet("QScrollBar:vertical {width: 2px; background-color: rgb(255, 255, 255);}");
|
||||
scrollArea->setStyleSheet("QScrollArea { border: none; }");
|
||||
layout->addWidget(scrollArea, 1, 0, 1, 9);
|
||||
|
||||
// 2. 创建 QWidget
|
||||
resultContainer = new QWidget();
|
||||
resultContainer->setObjectName("resultContainer");
|
||||
resultContainer->setStyleSheet("#resultContainer { background-color: rgb(255, 255, 255); } ");
|
||||
scrollArea->setWidget(resultContainer);
|
||||
|
||||
// 3. 给这个 QWidget 里面添加元素, 需要给它创建垂直的布局管理器
|
||||
QVBoxLayout* vlayout = new QVBoxLayout();
|
||||
vlayout->setSpacing(0);
|
||||
vlayout->setContentsMargins(0, 0, 0, 0);
|
||||
resultContainer->setLayout(vlayout);
|
||||
|
||||
}
|
||||
|
||||
void AddFriendDialog::addResult(const UserInfo& userInfo)
|
||||
{
|
||||
FriendResultItem* item = new FriendResultItem(userInfo);
|
||||
resultContainer->layout()->addWidget(item);
|
||||
}
|
||||
|
||||
void AddFriendDialog::clear()
|
||||
{
|
||||
// 从后向前遍历
|
||||
QVBoxLayout* layout = dynamic_cast<QVBoxLayout*>(resultContainer->layout());
|
||||
for (int i = layout->count() - 1; i >= 0; i--) {
|
||||
QLayoutItem* layoutItem = layout->takeAt(i);
|
||||
if (layoutItem == nullptr || layoutItem->widget() == nullptr) {
|
||||
continue;
|
||||
}
|
||||
//删除这里面所持有的元素
|
||||
delete layoutItem->widget();
|
||||
}
|
||||
}
|
||||
|
||||
void AddFriendDialog::setSearchKey(const QString& searcheKey)
|
||||
{
|
||||
searchEdit->setText(searcheKey);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user