#include "MainPanel.h" #include #include #include #include "widgets/userprofilewidget.h" #include "widgets/chatView/chatwindow.h" #include "widgets/bubbletip.h" #include "api/roomapi.h" #include "api/userapi.h" #include "appevent.h" #include "ui/av_recorder.h" #include "AvPlayer2/PlayWidget.h" #include MainPanel::MainPanel(QWidget *parent) : QWidget(parent) , userProfile(nullptr) , chatView(nullptr) { // setupUI userProfile = new UserProfileWidget(this); chatView = new ChatWindow(); chatView->setMinimumWidth(400); QWidget *rightWidget = new QWidget; QVBoxLayout *vbox = new QVBoxLayout(rightWidget); vbox->setContentsMargins(0, 0, 0, 0); vbox->addWidget(userProfile, 0); vbox->addWidget(chatView, 1); roomListWidget = new QListWidget; splitter = new QSplitter(Qt::Horizontal, this); playerContainer = new QWidget(this); splitter->addWidget(roomListWidget); splitter->addWidget(playerContainer); splitter->addWidget(rightWidget); splitter->setStretchFactor(0, 10); splitter->setStretchFactor(1, 60); splitter->setStretchFactor(2, 30); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->addWidget(splitter, 1); mainLayout->setContentsMargins(0, 0, 0, 0); mainLayout->setSpacing(0); setLayout(mainLayout); // initConnect connect(AppEvent::instance(), &AppEvent::connectionStateChanged, this, [this](bool connected) { if (userProfile) { userProfile->setStatus(connected ? "在线" : "离线"); } }); } MainPanel::~MainPanel() { if (userProfile) { delete userProfile; userProfile = nullptr; } } void MainPanel::setPlayerWidget(QWidget *newPlayer) { if (playerWidget) { playerWidget->setParent(nullptr); playerWidget->deleteLater(); } playerWidget = newPlayer; playerWidget->setParent(playerContainer); QLayout *oldLayout = playerContainer->layout(); if (oldLayout) { QLayoutItem *item; while ((item = oldLayout->takeAt(0)) != nullptr) { if (item->widget()) item->widget()->setParent(nullptr); delete item; } delete oldLayout; } QVBoxLayout *vbox = new QVBoxLayout(playerContainer); vbox->setContentsMargins(0, 0, 0, 0); vbox->addWidget(playerWidget); } void MainPanel::setRole(const QStringList &roleList) { QWidget *newPlayer = nullptr; if (roleList.contains("role.admin")) { newPlayer = new AvRecorder(this); } else { newPlayer = new PlayWidget(this); } setPlayerWidget(newPlayer); }