#include "MainWnd.h" #include "ui_MainWnd.h" #include "Login.h" #include #include #include "OriginalWnd/OriginalWnd.h" MainWnd::MainWnd(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWnd) { ui->setupUi(this); initForm(); } MainWnd::~MainWnd() { delete ui; } void MainWnd::initForm() { // 隐藏原生标题栏 setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); // 窗口背景透明 setAttribute(Qt::WA_TranslucentBackground, true); QPixmap pixmap(":/images/light/logo1.png"); QPixmap scaledPixmap = pixmap.scaled(90, 49, Qt::KeepAspectRatio); ui->label_logo->setPixmap(scaledPixmap); Login *login = new Login; ui->stackedWidget_UI->addWidget(login); ui->stackedWidget_UI->setCurrentIndex(ui->stackedWidget_UI->indexOf(login)); //登录监听 ui->label_logo->installEventFilter(this); ui->stackedWidget_UI->installEventFilter(this); //安装监听事件,点击左侧按钮图标变化 ui->tabHomeBtn->installEventFilter(this); ui->tabProductionBtn->installEventFilter(this); ui->tabProgramBtn->installEventFilter(this); ui->tabMessageBtn->installEventFilter(this); ui->tabModuleBtn->installEventFilter(this); ui->tabDispositionBtn->installEventFilter(this); ui->tabDiagnosisBtn->installEventFilter(this); ui->tabSystemBtn->installEventFilter(this); ui->tabHelpBtn->installEventFilter(this); } bool MainWnd::eventFilter(QObject *obj, QEvent *event) { if (obj == this->ui->stackedWidget_UI) { onCurrentWidgetChanged(); } if (obj == this->ui->label_logo) { //判断事件类型是否为鼠标事件 if (event->type() == QEvent::MouseButtonPress) { //转换为鼠标事件 QMouseEvent* mouseenevt = static_cast(event); //判断鼠标左键点击 if (mouseenevt->button() == Qt::LeftButton) { Login *login = new Login; ui->stackedWidget_UI->addWidget(login); ui->stackedWidget_UI->setCurrentIndex(ui->stackedWidget_UI->indexOf(login)); return true; } } } static const QStringList buttonNames = { "home", "Productionn assistance", "Program", "Message", "Module", "Disposition", "Diagnosis", "System", "Help" }; static QToolButton* lastHoveredButton = nullptr; // 用于跟踪上一个悬停的按钮 static QMap buttonLightIcons; // 存储每个按钮的亮色图标路径 // 处理鼠标按下事件或鼠标悬停进入事件 if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::HoverEnter) { if (obj && obj->inherits("QToolButton")) { QToolButton* button = static_cast(obj); // 恢复所有按钮为亮色图标(如果没有选中) for (int i = 0; i < buttonNames.size(); ++i) { QToolButton* currentButton = nullptr; switch (i) { case 0: currentButton = ui->tabHomeBtn; break; case 1: currentButton = ui->tabProductionBtn; break; case 2: currentButton = ui->tabProgramBtn; break; case 3: currentButton = ui->tabMessageBtn; break; case 4: currentButton = ui->tabModuleBtn; break; case 5: currentButton = ui->tabDispositionBtn; break; case 6: currentButton = ui->tabDiagnosisBtn; break; case 7: currentButton = ui->tabSystemBtn; break; case 8: currentButton = ui->tabHelpBtn; break; } if (currentButton) { QString lightIconPath = QString(":/images/light/%1.png").arg(buttonNames[i]); if (currentButton == button) { // 当前悬停的按钮,设置为深色图标 QString deepIconPath = QString(":/images/deep/%1.png").arg(buttonNames[i]); currentButton->setIcon(QIcon(deepIconPath)); currentButton->setChecked(true); } else if (!currentButton->isChecked()) { // 恢复为亮色图标 buttonLightIcons[currentButton] = lightIconPath; // 存储亮色图标路径 currentButton->setIcon(QIcon(lightIconPath)); } } } // 如果上一个悬停按钮存在且不是当前按钮,恢复其亮色图标 if (lastHoveredButton && lastHoveredButton != button && !lastHoveredButton->isChecked()) { QString lightIconPath = buttonLightIcons.value(lastHoveredButton); if (!lightIconPath.isEmpty()) { lastHoveredButton->setIcon(QIcon(lightIconPath)); } } lastHoveredButton = button; // 更新为当前悬停的按钮 } return true; // 表示事件已处理 } // 处理鼠标离开事件 if (event->type() == QEvent::HoverLeave) { if (obj && obj->inherits("QToolButton")) { QToolButton* button = static_cast(obj); if (button == lastHoveredButton && !button->isChecked()) { QString lightIconPath = buttonLightIcons.value(button); if (!lightIconPath.isEmpty()) { button->setIcon(QIcon(lightIconPath)); } lastHoveredButton = nullptr; // 重置上一个悬停的按钮 } } return true; // 表示事件已处理 } return QWidget::eventFilter(obj, event); // 如果没有处理返回默认事件处理 } void MainWnd::onCurrentWidgetChanged() { QWidget *currentWidget = ui->stackedWidget_UI->currentWidget(); if (currentWidget) { QString currentWidgetName = currentWidget->objectName(); if (currentWidgetName == "Login") { QString styleSheet = "QToolButton:disabled { color: #808080; }"; // 设置禁用状态下的文本颜色为灰色 ui->tabHomeBtn->setDisabled(true); ui->tabHomeBtn->setStyleSheet(styleSheet); ui->tabProductionBtn->setDisabled(true); ui->tabProductionBtn->setStyleSheet(styleSheet); ui->tabProgramBtn->setDisabled(true); ui->tabProgramBtn->setStyleSheet(styleSheet); ui->tabMessageBtn->setDisabled(true); ui->tabMessageBtn->setStyleSheet(styleSheet); ui->tabModuleBtn->setDisabled(true); ui->tabModuleBtn->setStyleSheet(styleSheet); ui->tabDispositionBtn->setDisabled(true); ui->tabDispositionBtn->setStyleSheet(styleSheet); ui->tabDiagnosisBtn->setDisabled(true); ui->tabDiagnosisBtn->setStyleSheet(styleSheet); ui->tabSystemBtn->setDisabled(true); ui->tabSystemBtn->setStyleSheet(styleSheet); ui->tabHelpBtn->setDisabled(true); ui->tabHelpBtn->setStyleSheet(styleSheet); } else { ui->tabHomeBtn->setDisabled(false); ui->tabProductionBtn->setDisabled(false); ui->tabProgramBtn->setDisabled(false); ui->tabMessageBtn->setDisabled(false); ui->tabModuleBtn->setDisabled(false); ui->tabDispositionBtn->setDisabled(false); ui->tabDiagnosisBtn->setDisabled(false); ui->tabSystemBtn->setDisabled(false); ui->tabHelpBtn->setDisabled(false); } if (currentWidgetName == "OriginalWnd") { ui->tabHomeBtn->setIcon(QIcon(":/images/deep/home.png")); ui->tabHomeBtn->setChecked(true); ui->tabHomeBtn->setStyleSheet("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #949FE8,stop:1 #2D309B);color:#FFFFFF;"); ui->tabHomeBtn->update(); } else { // ui->tabHomeBtn->setStyleSheet(""); // 恢复默认样式 } } } void MainWnd::on_tabHomeBtn_clicked() { OriginalWnd *originalWnd = new OriginalWnd(this); ui->stackedWidget_UI->addWidget(originalWnd); ui->stackedWidget_UI->setCurrentIndex(ui->stackedWidget_UI->indexOf(originalWnd)); } void MainWnd::on_pushButton_clicked() { qApp->quit(); }