#include "UIStyleManager.h" #include #include #include #include #include "spdlog/spdlog.h" UIStyleManager::UIStyleManager() { m_qssPath = ":/qss"; } /* 获取样式表路径 */ QString UIStyleManager::getQSSPath() { if(m_UIStyle == EUIStyle::UI_Light) { return m_qssPath + m_lightQSS; } else if(m_UIStyle == EUIStyle::UI_Dark) { return m_qssPath + m_darkQSS; } return QString(); } /* 换肤,修改样式表 */ void UIStyleManager::setUIStyle(EUIStyle style) { m_UIStyle = style; /* 打开所有的QSS文件 */ readQSSFile(); /* 修改已经注册到这里的widget的qss */ changeListWidget(style); /* 发送普通换肤信号信号 */ emit signal_qssChanged(style); /* 处理事件,让UI接收到换肤信号 */ QEventLoop loop; loop.processEvents(); SPDLOG_INFO("换肤成功,皮肤样式:{}", static_cast(m_UIStyle)); } /* 注册需要修改样式表的组件 */ void UIStyleManager::registerWidget(QWidget* widget) { if(widget == nullptr) { SPDLOG_ERROR("注册组件失败,组件指针为空"); return; } if(!m_listWidgets.contains(widget)) { m_listWidgets.append(widget); /* 设置样式表 */ QString qssPath = getQSSPath() + "/" + widget->objectName().toLower() + ".qss"; QFile file(qssPath); if (!file.open(QFile::ReadOnly | QFile::Text)) { SPDLOG_ERROR("打开组件样式表文件失败,路径 {}", qssPath.toStdString()); SPDLOG_ERROR("错误信息:{}", file.errorString().toStdString()); return; } QString styleSheet = file.readAll(); file.close(); widget->setStyleSheet(styleSheet); // SPDLOG_INFO("注册组件成功,组件名称:{}", widget->objectName().toStdString()); } else { SPDLOG_WARN("组件已经注册过了,组件名称:{}", widget->objectName().toStdString()); } } /* 注销需要修改样式表的组件 */ void UIStyleManager::unregisterWidget(QWidget* widget) { if(widget == nullptr) { SPDLOG_ERROR("注销组件失败,组件指针为空"); return; } if(m_listWidgets.contains(widget)) { m_listWidgets.removeAll(widget); // SPDLOG_INFO("注销组件成功,组件名称:{}", widget->objectName().toStdString()); } else { SPDLOG_WARN("组件没有注册过,无法注销,组件名称:{}", widget->objectName().toStdString()); } } /** * @brief 这里读取需要重复打开的QSS文件 * */ void UIStyleManager::readQSSFile() { } /* 修改已经注册到这里的widget的qss */ void UIStyleManager::changeListWidget(EUIStyle style) { for(QWidget* widget : m_listWidgets) { if(widget == nullptr) { SPDLOG_ERROR("修改组件样式表失败,组件指针为空"); continue; } QString qssPath = getQSSPath() + "/" + widget->objectName().toLower() + ".qss"; QFile file(qssPath); if (!file.open(QFile::ReadOnly | QFile::Text)) { SPDLOG_ERROR("打开组件样式表文件失败,路径:{}", qssPath.toStdString()); SPDLOG_ERROR("错误信息:{}", file.errorString().toStdString()); continue; } QString styleSheet = file.readAll(); file.close(); widget->setStyleSheet(styleSheet); } }