| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- #include "joinmeetingdialog.h"
- #include <QMessageBox>
- #include <QRegularExpression>
- #include <QRegularExpressionValidator>
- 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();
- }
|