#ifndef ONLINEUSERSWIDGET_H #define ONLINEUSERSWIDGET_H #include #include #include #include #include #include #include #include #include #include #include #include #include struct OnlineUser { QString userId; QString username; QString status; // "在线", "离开", "忙碌" QDateTime lastSeen; QString avatar; // 头像URL或路径 bool isAdmin; OnlineUser() : isAdmin(false) {} OnlineUser(const QString &id, const QString &name, const QString &stat = "在线") : userId(id), username(name), status(stat), isAdmin(false), lastSeen(QDateTime::currentDateTime()) {} }; class OnlineUsersWidget : public QWidget { Q_OBJECT public: explicit OnlineUsersWidget(QWidget *parent = nullptr); ~OnlineUsersWidget(); // 用户管理 void addUser(const OnlineUser &user); void removeUser(const QString &userId); void updateUserStatus(const QString &userId, const QString &status); void updateUserList(const QJsonArray &users); void clearUsers(); // 获取用户信息 QList getAllUsers() const; OnlineUser getUser(const QString &userId) const; int getUserCount() const; // 搜索功能 void setSearchVisible(bool visible); void filterUsers(const QString &keyword); signals: // 用户交互信号 void userDoubleClicked(const QString &userId, const QString &username); void userRightClicked(const QString &userId, const QString &username, const QPoint &position); void privateMessageRequested(const QString &userId, const QString &username); void userProfileRequested(const QString &userId, const QString &username); private slots: void onTableDoubleClicked(int row, int column); void onTableContextMenu(const QPoint &position); void onSearchTextChanged(const QString &text); void onRefreshClicked(); void updateUserCountLabel(); private: void setupUI(); void setupTable(); void setupContextMenu(); void applyStyles(); void updateTableRow(int row, const OnlineUser &user); int findUserRow(const QString &userId) const; QString getStatusIcon(const QString &status) const; // UI组件 QVBoxLayout *m_mainLayout; QHBoxLayout *m_headerLayout; QLabel *m_titleLabel; QLabel *m_countLabel; QPushButton *m_refreshButton; QLineEdit *m_searchEdit; QTableWidget *m_usersTable; // 右键菜单 QMenu *m_contextMenu; QAction *m_privateMessageAction; QAction *m_viewProfileAction; QAction *m_kickUserAction; // 仅管理员可见 // 数据 QList m_users; QString m_currentFilter; // 当前选中的用户 QString m_selectedUserId; QString m_selectedUsername; }; #endif // ONLINEUSERSWIDGET_H