#pragma once #include #include #include "qobjectdefs.h" #include #include #include class QSplitter; class QListWidget; class UserProfileWidget; class ChatWindow; class QListWidgetItem; class WebSocketClient; class MainPanel : public QWidget { Q_OBJECT public: explicit MainPanel(QWidget *parent = nullptr); ~MainPanel(); void setRole(const QStringList &roleList); void setPushRoomId(const QString &room); QListWidget *roomListWidget() { return m_roomListWidget; } signals: void logoutClicked(); private: void setPlayerWidget(QWidget *newPlayer); void roomItemChanged(QListWidgetItem *item); void handleDebouncedPlay(); // 防抖处理函数 private: QSplitter *splitter = nullptr; QWidget *playerContainer = nullptr; QWidget *playerWidget = nullptr; UserProfileWidget *userProfile = nullptr; ChatWindow *chatView = nullptr; QListWidget *m_roomListWidget = nullptr; WebSocketClient *webSocketClient = nullptr; bool m_isStartingPlay = false; QMutex m_playMutex; QWaitCondition m_playCond; QTimer *m_debounceTimer = nullptr; QString m_pendingRoomId; };