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:
@ -4,7 +4,8 @@
|
||||
////////////////////////////////////////////////
|
||||
/// 选择好友窗口中的一个 元素/好友项
|
||||
////////////////////////////////////////////////
|
||||
ChooseFriendItem::ChooseFriendItem(ChooseFriendDialog* owner, const QIcon& avatar, const QString& name, bool checked)
|
||||
ChooseFriendItem::ChooseFriendItem(ChooseFriendDialog* owner, const QString& userId, const QIcon& avatar, const QString& name, bool checked)
|
||||
:userId(userId)
|
||||
{
|
||||
// 1. 设置控件的基本属性
|
||||
this->setFixedHeight(50);
|
||||
@ -44,11 +45,11 @@ ChooseFriendItem::ChooseFriendItem(ChooseFriendDialog* owner, const QIcon& avata
|
||||
connect(checkBox, &QCheckBox::toggled, this, [=](bool checked) {
|
||||
if (checked) {
|
||||
// 勾选了复选框, 把当前这个 Item, 添加到右侧的已选择区域
|
||||
owner->addSelectedFriend(avatar, name);
|
||||
owner->addSelectedFriend(userId, avatar, name);
|
||||
}
|
||||
else {
|
||||
// 取消勾选
|
||||
//owner->deleteSelectedFriend(userId);
|
||||
owner->deleteSelectedFriend(userId);
|
||||
}
|
||||
});
|
||||
|
||||
@ -74,7 +75,7 @@ void ChooseFriendItem::enterEvent(QEnterEvent* event)
|
||||
isHover = true;
|
||||
//相当于界面更新
|
||||
this->update();
|
||||
//this->repaint();
|
||||
//this->repaint(); //也可以
|
||||
}
|
||||
|
||||
void ChooseFriendItem::leaveEvent(QEvent* event)
|
||||
@ -138,7 +139,7 @@ void ChooseFriendDialog::initLeft(QHBoxLayout* layout)
|
||||
#if TEST_UI
|
||||
QIcon defaultAvatar(":/resource/image/defaultAvatar.png");
|
||||
for (int i = 0; i < 15; ++i) {
|
||||
this->addFriend(defaultAvatar, "张三" + QString::number(i), false);
|
||||
this->addFriend(QString::number(1000 + i), defaultAvatar, "张三" + QString::number(i), false);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -208,7 +209,7 @@ void ChooseFriendDialog::initRight(QHBoxLayout* layout)
|
||||
// 此处的数据通过勾选左侧列表来生成.
|
||||
QIcon defaultAvatar(":/resource/image/defaultAvatar.png");
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
this->addSelectedFriend(defaultAvatar, "张三" + QString::number(i));
|
||||
this->addSelectedFriend(QString::number(1000 + i), defaultAvatar, "张三" + QString::number(i));
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -220,14 +221,54 @@ void ChooseFriendDialog::initRight(QHBoxLayout* layout)
|
||||
|
||||
}
|
||||
|
||||
void ChooseFriendDialog::addFriend(const QIcon& avatar, const QString& name, bool checked)
|
||||
void ChooseFriendDialog::addFriend(const QString& userId, const QIcon& avatar, const QString& name, bool checked)
|
||||
{
|
||||
ChooseFriendItem* item = new ChooseFriendItem(this, avatar, name, checked);
|
||||
ChooseFriendItem* item = new ChooseFriendItem(this, userId, avatar, name, checked);
|
||||
totalContainer->layout()->addWidget(item);
|
||||
}
|
||||
|
||||
void ChooseFriendDialog::addSelectedFriend(const QIcon& avatar, const QString& name)
|
||||
void ChooseFriendDialog::addSelectedFriend(const QString& userId, const QIcon& avatar, const QString& name)
|
||||
{
|
||||
ChooseFriendItem* item = new ChooseFriendItem(this, avatar, name, true);
|
||||
ChooseFriendItem* item = new ChooseFriendItem(this, userId, avatar, name, true);
|
||||
selectedContainer->layout()->addWidget(item);
|
||||
}
|
||||
|
||||
void ChooseFriendDialog::deleteSelectedFriend(const QString& userId)
|
||||
{
|
||||
//遍历selectedContainer中的所有的Item,并对比其userId
|
||||
QVBoxLayout* vlayout = dynamic_cast<QVBoxLayout*>(selectedContainer->layout());
|
||||
//由于是要遍历加删除所以,要从后向前进行
|
||||
for (int i = vlayout->count() - 1; i >= 0; --i) {
|
||||
auto* item = vlayout->itemAt(i);
|
||||
if (item == nullptr || item->widget() == nullptr) {
|
||||
continue;
|
||||
}
|
||||
ChooseFriendItem* chooseFriendItem = dynamic_cast<ChooseFriendItem*>(item->widget());
|
||||
//判定当前的Item的userId是否是要删除的userId
|
||||
if (chooseFriendItem->getUserId() != userId) {
|
||||
continue;
|
||||
}
|
||||
vlayout->removeWidget(chooseFriendItem);
|
||||
//会报错!!!
|
||||
// 要释放对象,不是直接delete,而是告诉qt让qt在信号槽这一轮
|
||||
// 执行完成后,自行负责释放
|
||||
//delete chooseFriendItem;
|
||||
chooseFriendItem->deleteLater();
|
||||
}
|
||||
|
||||
//再遍历一下左侧的列表,把左侧对应的item的checkBox的勾选状态给取消
|
||||
QVBoxLayout* vlayoutLeft = dynamic_cast<QVBoxLayout*>(totalContainer->layout());
|
||||
for(int i = 0; i < vlayoutLeft->count(); i++) {
|
||||
auto* item = vlayoutLeft->itemAt(i);
|
||||
if (item == nullptr || item->widget() == nullptr) {
|
||||
continue;
|
||||
}
|
||||
ChooseFriendItem* chooseFriendItem = dynamic_cast<ChooseFriendItem*>(item->widget());
|
||||
if (chooseFriendItem->getUserId() != userId) {
|
||||
continue;
|
||||
}
|
||||
|
||||
//已找到,取消勾选状态
|
||||
chooseFriendItem->getCheckBox()->setChecked(false);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user