From bf3bd5a2bae687d2eb79beb78fc151e39730c4b2 Mon Sep 17 00:00:00 2001 From: xyz <2050965275@qq.com> Date: Fri, 23 May 2025 20:25:45 +0800 Subject: [PATCH] fix bug --- CMakeLists.txt | 1 + debug.h | 6 ++++ mainwidget.cpp | 2 +- sessionfriendarea.cpp | 77 ++++++++++++++++++++++++++++++++++++++----- sessionfriendarea.h | 10 +++++- 5 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 debug.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 90009a3..d52b8f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,7 @@ else() model/data.h resource.qrc sessionfriendarea.h sessionfriendarea.cpp + debug.h ) endif() endif() diff --git a/debug.h b/debug.h new file mode 100644 index 0000000..db4728a --- /dev/null +++ b/debug.h @@ -0,0 +1,6 @@ +#ifndef DEBUG_H +#define DEBUG_H + +#define TEST_UI 1 + +#endif // DEBUG_H diff --git a/mainwidget.cpp b/mainwidget.cpp index 9c4d81b..c9597dc 100644 --- a/mainwidget.cpp +++ b/mainwidget.cpp @@ -128,7 +128,7 @@ void MainWidget::initMidWindow() searchEdit = new QLineEdit(); searchEdit->setFixedHeight(30); searchEdit->setPlaceholderText("搜索"); - searchEdit->setStyleSheet("QLineEdit {border-radius: 5px; background-color: rgb(226, 226, 226); padding-left: 5px }"); + searchEdit->setStyleSheet("QLineEdit { border-radius: 5px; background-color: rgb(226, 226, 226); padding-left: 5px; }"); addFriendBtn = new QPushButton(); addFriendBtn->setFixedSize(30, 30); diff --git a/sessionfriendarea.cpp b/sessionfriendarea.cpp index 0db23ce..e3d4870 100644 --- a/sessionfriendarea.cpp +++ b/sessionfriendarea.cpp @@ -1,9 +1,8 @@ #include "sessionfriendarea.h" -#include -#include -#include -#include -#include + + +#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); } diff --git a/sessionfriendarea.h b/sessionfriendarea.h index f2d3174..cccd56d 100644 --- a/sessionfriendarea.h +++ b/sessionfriendarea.h @@ -3,6 +3,14 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include //////////////////////////////////////// @@ -24,7 +32,7 @@ public: // private: - //后续向container中的layout添加元素,就会有QScrollArea的滚动 + //后续向container中的layout添加元素,就会有QScrollArea的滚动 QWidget* container; signals: