meetingselectionwidget.cpp 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #include "meetingselectionwidget.h"
  2. #include "../appevent.h"
  3. #include <QApplication>
  4. #include <QScreen>
  5. MeetingSelectionWidget::MeetingSelectionWidget(QWidget *parent)
  6. : QWidget(parent)
  7. , m_mainLayout(nullptr)
  8. , m_titleLabel(nullptr)
  9. , m_welcomeLabel(nullptr)
  10. , m_buttonFrame(nullptr)
  11. , m_buttonLayout(nullptr)
  12. , m_joinMeetingBtn(nullptr)
  13. , m_createMeetingBtn(nullptr)
  14. , m_logoutBtn(nullptr)
  15. , m_isAdmin(false)
  16. {
  17. setupUI();
  18. applyStyles();
  19. }
  20. MeetingSelectionWidget::~MeetingSelectionWidget()
  21. {
  22. }
  23. void MeetingSelectionWidget::setupUI()
  24. {
  25. // 主布局
  26. m_mainLayout = new QVBoxLayout(this);
  27. m_mainLayout->setContentsMargins(50, 50, 50, 50);
  28. m_mainLayout->setSpacing(30);
  29. // 标题
  30. m_titleLabel = new QLabel("智能学习客户端", this);
  31. m_titleLabel->setAlignment(Qt::AlignCenter);
  32. m_titleLabel->setObjectName("titleLabel");
  33. // 欢迎信息
  34. m_welcomeLabel = new QLabel("欢迎使用!请选择您要进行的操作:", this);
  35. m_welcomeLabel->setAlignment(Qt::AlignCenter);
  36. m_welcomeLabel->setObjectName("welcomeLabel");
  37. // 按钮容器
  38. m_buttonFrame = new QFrame(this);
  39. m_buttonFrame->setObjectName("buttonFrame");
  40. m_buttonLayout = new QVBoxLayout(m_buttonFrame);
  41. m_buttonLayout->setContentsMargins(20, 20, 20, 20);
  42. m_buttonLayout->setSpacing(20);
  43. // 加入会议按钮
  44. m_joinMeetingBtn = new QPushButton("加入会议", this);
  45. m_joinMeetingBtn->setObjectName("joinMeetingBtn");
  46. m_joinMeetingBtn->setMinimumHeight(60);
  47. connect(m_joinMeetingBtn, &QPushButton::clicked, this, &MeetingSelectionWidget::onJoinMeetingClicked);
  48. // 创建会议按钮
  49. m_createMeetingBtn = new QPushButton("创建会议", this);
  50. m_createMeetingBtn->setObjectName("createMeetingBtn");
  51. m_createMeetingBtn->setMinimumHeight(60);
  52. connect(m_createMeetingBtn, &QPushButton::clicked, this, &MeetingSelectionWidget::onCreateMeetingClicked);
  53. // 退出登录按钮
  54. m_logoutBtn = new QPushButton("退出登录", this);
  55. m_logoutBtn->setObjectName("logoutBtn");
  56. m_logoutBtn->setMinimumHeight(40);
  57. connect(m_logoutBtn, &QPushButton::clicked, this, &MeetingSelectionWidget::onLogoutClicked);
  58. // 添加按钮到布局
  59. m_buttonLayout->addWidget(m_joinMeetingBtn);
  60. m_buttonLayout->addWidget(m_createMeetingBtn);
  61. m_buttonLayout->addStretch();
  62. m_buttonLayout->addWidget(m_logoutBtn);
  63. // 添加到主布局
  64. m_mainLayout->addStretch();
  65. m_mainLayout->addWidget(m_titleLabel);
  66. m_mainLayout->addWidget(m_welcomeLabel);
  67. m_mainLayout->addStretch();
  68. m_mainLayout->addWidget(m_buttonFrame, 0, Qt::AlignCenter);
  69. m_mainLayout->addStretch();
  70. // 设置按钮框架的固定宽度
  71. m_buttonFrame->setFixedWidth(300);
  72. }
  73. void MeetingSelectionWidget::setUserRoles(const QStringList &roles)
  74. {
  75. m_userRoles = roles;
  76. m_isAdmin = roles.contains("role.admin");
  77. updateButtonsVisibility();
  78. }
  79. void MeetingSelectionWidget::setUserInfo(const QString &username, const QString &userId)
  80. {
  81. m_username = username;
  82. m_userId = userId;
  83. // 更新欢迎信息
  84. if (!username.isEmpty()) {
  85. m_welcomeLabel->setText(QString("欢迎,%1!请选择您要进行的操作:").arg(username));
  86. }
  87. }
  88. void MeetingSelectionWidget::updateButtonsVisibility()
  89. {
  90. // 所有用户都可以加入会议
  91. m_joinMeetingBtn->setVisible(true);
  92. // 只有管理员可以创建会议
  93. m_createMeetingBtn->setVisible(m_isAdmin);
  94. }
  95. void MeetingSelectionWidget::applyStyles()
  96. {
  97. // 设置整体样式
  98. setStyleSheet("MeetingSelectionWidget {"
  99. " background-color: #f5f5f5;"
  100. "}"
  101. "#titleLabel {"
  102. " font-size: 28px;"
  103. " font-weight: bold;"
  104. " color: #2c3e50;"
  105. " margin-bottom: 10px;"
  106. "}"
  107. "#welcomeLabel {"
  108. " font-size: 16px;"
  109. " color: #7f8c8d;"
  110. " margin-bottom: 20px;"
  111. "}"
  112. "#buttonFrame {"
  113. " background-color: white;"
  114. " border: 1px solid #e0e0e0;"
  115. " border-radius: 10px;"
  116. "}"
  117. "#joinMeetingBtn {"
  118. " background-color: #3498db;"
  119. " color: white;"
  120. " border: none;"
  121. " border-radius: 8px;"
  122. " font-size: 16px;"
  123. " font-weight: bold;"
  124. " padding: 15px;"
  125. "}"
  126. "#joinMeetingBtn:hover {"
  127. " background-color: #2980b9;"
  128. "}"
  129. "#joinMeetingBtn:pressed {"
  130. " background-color: #21618c;"
  131. "}"
  132. "#createMeetingBtn {"
  133. " background-color: #27ae60;"
  134. " color: white;"
  135. " border: none;"
  136. " border-radius: 8px;"
  137. " font-size: 16px;"
  138. " font-weight: bold;"
  139. " padding: 15px;"
  140. "}"
  141. "#createMeetingBtn:hover {"
  142. " background-color: #229954;"
  143. "}"
  144. "#createMeetingBtn:pressed {"
  145. " background-color: #1e8449;"
  146. "}"
  147. "#logoutBtn {"
  148. " background-color: #e74c3c;"
  149. " color: white;"
  150. " border: none;"
  151. " border-radius: 6px;"
  152. " font-size: 14px;"
  153. " padding: 10px;"
  154. "}"
  155. "#logoutBtn:hover {"
  156. " background-color: #c0392b;"
  157. "}"
  158. "#logoutBtn:pressed {"
  159. " background-color: #a93226;"
  160. "}");
  161. }
  162. void MeetingSelectionWidget::onJoinMeetingClicked()
  163. {
  164. emit joinMeetingRequested();
  165. }
  166. void MeetingSelectionWidget::onCreateMeetingClicked()
  167. {
  168. emit createMeetingRequested();
  169. }
  170. void MeetingSelectionWidget::onLogoutClicked()
  171. {
  172. emit logoutRequested();
  173. }