#include "joinmeetingdialog.h" #include #include #include JoinMeetingDialog::JoinMeetingDialog(QWidget *parent) : QDialog(parent) , m_mainLayout(nullptr) , m_tabWidget(nullptr) , m_manualTab(nullptr) , m_manualLayout(nullptr) , m_manualLabel(nullptr) , m_meetingIdEdit(nullptr) , m_selectTab(nullptr) , m_selectLayout(nullptr) , m_selectLabel(nullptr) , m_meetingListWidget(nullptr) , m_buttonLayout(nullptr) , m_joinButton(nullptr) , m_cancelButton(nullptr) { setWindowTitle("加入会议"); setModal(true); resize(400, 300); setupUI(); applyStyles(); // 默认选择手动输入标签页 m_tabWidget->setCurrentIndex(0); // 初始状态下禁用加入按钮 m_joinButton->setEnabled(false); } JoinMeetingDialog::~JoinMeetingDialog() { } void JoinMeetingDialog::setupUI() { m_mainLayout = new QVBoxLayout(this); m_mainLayout->setContentsMargins(20, 20, 20, 20); m_mainLayout->setSpacing(15); // 创建标签页控件 m_tabWidget = new QTabWidget(this); // 手动输入标签页 m_manualTab = new QWidget(); m_manualLayout = new QVBoxLayout(m_manualTab); m_manualLayout->setContentsMargins(15, 15, 15, 15); m_manualLayout->setSpacing(10); m_manualLabel = new QLabel("请输入会议ID:", m_manualTab); m_meetingIdEdit = new QLineEdit(m_manualTab); m_meetingIdEdit->setPlaceholderText("例如:123456789"); // 设置输入验证器(只允许数字和字母) QRegularExpression regex("[A-Za-z0-9]{1,20}"); QRegularExpressionValidator *validator = new QRegularExpressionValidator(regex, this); m_meetingIdEdit->setValidator(validator); connect(m_meetingIdEdit, &QLineEdit::textChanged, this, &JoinMeetingDialog::onMeetingIdChanged); m_manualLayout->addWidget(m_manualLabel); m_manualLayout->addWidget(m_meetingIdEdit); m_manualLayout->addStretch(); m_tabWidget->addTab(m_manualTab, "手动输入"); // 选择会议标签页 m_selectTab = new QWidget(); m_selectLayout = new QVBoxLayout(m_selectTab); m_selectLayout->setContentsMargins(15, 15, 15, 15); m_selectLayout->setSpacing(10); m_selectLabel = new QLabel("选择可用的会议:", m_selectTab); m_meetingListWidget = new QListWidget(m_selectTab); connect(m_meetingListWidget, &QListWidget::itemClicked, this, &JoinMeetingDialog::onMeetingItemClicked); connect(m_meetingListWidget, &QListWidget::itemDoubleClicked, this, &JoinMeetingDialog::accept); m_selectLayout->addWidget(m_selectLabel); m_selectLayout->addWidget(m_meetingListWidget); m_tabWidget->addTab(m_selectTab, "选择会议"); // 按钮布局 m_buttonLayout = new QHBoxLayout(); m_buttonLayout->addStretch(); m_cancelButton = new QPushButton("取消", this); m_joinButton = new QPushButton("加入会议", this); connect(m_cancelButton, &QPushButton::clicked, this, &JoinMeetingDialog::reject); connect(m_joinButton, &QPushButton::clicked, this, &JoinMeetingDialog::accept); m_buttonLayout->addWidget(m_cancelButton); m_buttonLayout->addWidget(m_joinButton); // 添加到主布局 m_mainLayout->addWidget(m_tabWidget); m_mainLayout->addLayout(m_buttonLayout); } void JoinMeetingDialog::applyStyles() { setStyleSheet( "JoinMeetingDialog {" " background-color: #f8f9fa;" "}" "QTabWidget::pane {" " border: 1px solid #dee2e6;" " border-radius: 5px;" " background-color: white;" "}" "QTabWidget::tab-bar {" " alignment: center;" "}" "QTabBar::tab {" " background-color: #e9ecef;" " border: 1px solid #dee2e6;" " border-bottom: none;" " border-top-left-radius: 5px;" " border-top-right-radius: 5px;" " padding: 8px 16px;" " margin-right: 2px;" "}" "QTabBar::tab:selected {" " background-color: white;" " border-bottom: 1px solid white;" "}" "QTabBar::tab:hover {" " background-color: #f8f9fa;" "}" "QLabel {" " font-size: 14px;" " color: #495057;" " font-weight: 500;" "}" "QLineEdit {" " border: 2px solid #e9ecef;" " border-radius: 6px;" " padding: 8px 12px;" " font-size: 14px;" " background-color: white;" "}" "QLineEdit:focus {" " border-color: #007bff;" " outline: none;" "}" "QListWidget {" " border: 2px solid #e9ecef;" " border-radius: 6px;" " background-color: white;" " selection-background-color: #007bff;" " selection-color: white;" "}" "QListWidget::item {" " padding: 8px 12px;" " border-bottom: 1px solid #f8f9fa;" "}" "QListWidget::item:hover {" " background-color: #f8f9fa;" "}" "QPushButton {" " border: none;" " border-radius: 6px;" " padding: 10px 20px;" " font-size: 14px;" " font-weight: 500;" " min-width: 80px;" "}" "#joinButton {" " background-color: #007bff;" " color: white;" "}" "#joinButton:hover {" " background-color: #0056b3;" "}" "#joinButton:pressed {" " background-color: #004085;" "}" "#joinButton:disabled {" " background-color: #6c757d;" " color: #adb5bd;" "}" "#cancelButton {" " background-color: #6c757d;" " color: white;" "}" "#cancelButton:hover {" " background-color: #545b62;" "}" "#cancelButton:pressed {" " background-color: #3d4142;" "}" ); m_joinButton->setObjectName("joinButton"); m_cancelButton->setObjectName("cancelButton"); } void JoinMeetingDialog::setAvailableMeetings(const QStringList &meetingIds, const QStringList &meetingNames) { m_meetingIds = meetingIds; m_meetingNames = meetingNames; m_meetingListWidget->clear(); for (int i = 0; i < meetingIds.size() && i < meetingNames.size(); ++i) { QString displayText = QString("%1 - %2").arg(meetingIds[i], meetingNames[i]); QListWidgetItem *item = new QListWidgetItem(displayText); item->setData(Qt::UserRole, meetingIds[i]); // 存储会议ID m_meetingListWidget->addItem(item); } // 如果没有可用会议,禁用选择标签页 m_tabWidget->setTabEnabled(1, !meetingIds.isEmpty()); } QString JoinMeetingDialog::getSelectedMeetingId() const { return m_selectedMeetingId; } void JoinMeetingDialog::onMeetingItemClicked() { QListWidgetItem *currentItem = m_meetingListWidget->currentItem(); if (currentItem) { m_selectedMeetingId = currentItem->data(Qt::UserRole).toString(); m_joinButton->setEnabled(true); } } void JoinMeetingDialog::onMeetingIdChanged() { QString text = m_meetingIdEdit->text().trimmed(); if (m_tabWidget->currentIndex() == 0) { // 手动输入标签页 m_selectedMeetingId = text; m_joinButton->setEnabled(!text.isEmpty()); } } void JoinMeetingDialog::validateInput() { bool isValid = false; if (m_tabWidget->currentIndex() == 0) { // 手动输入 isValid = !m_meetingIdEdit->text().trimmed().isEmpty(); m_selectedMeetingId = m_meetingIdEdit->text().trimmed(); } else { // 选择会议 QListWidgetItem *currentItem = m_meetingListWidget->currentItem(); isValid = (currentItem != nullptr); if (isValid) { m_selectedMeetingId = currentItem->data(Qt::UserRole).toString(); } } m_joinButton->setEnabled(isValid); } void JoinMeetingDialog::accept() { validateInput(); if (m_selectedMeetingId.isEmpty()) { QMessageBox::warning(this, "输入错误", "请输入或选择一个有效的会议ID。"); return; } QDialog::accept(); } void JoinMeetingDialog::reject() { m_selectedMeetingId.clear(); QDialog::reject(); }