#include "sessionfriendarea.h" #include "debug.h" #include "model/data.h" SessionFriendArea::SessionFriendArea(QWidget *parent) : QScrollArea {parent} { //设置必要属性 //设置这个才能有滚动效果 this->setWidgetResizable(true); //设置滚动条相关样式 this->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 2px; background-color: rgb(46, 46, 46); }"); this->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal { height: 0px; }"); // 把widget创建出来 container = new QWidget(); container->setFixedWidth(310); this->setWidget(container); //给这个widget添加布局管理器方便后续添加元素进去 QVBoxLayout* layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->setAlignment(Qt::AlignTop); container->setLayout(layout); // //简单测试一下滚动的效果(just for testing...) // for(int i = 0; i < 50; i++) { // QPushButton* btn = new QPushButton(); // QString Sbtn = "button: " + QString::number(i); // 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); }