123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #include "UIStyleManager.h"
- #include <QFile>
- #include <QEventLoop>
- #include <qchar.h>
- #include <qevent.h>
- #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<int>(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);
- }
-
- }
|