你们好,我是IT文艺男,来自一线大厂的一线程序员程序员
今天给你们讲解基于C++/Qt的CQGUI框架的样式管理实现。微信
在Qt平台,实现窗口/控件美化或者自定义效果,有以下两种方式app
对于重绘,我以前实现的一个效果以下图所示::
框架
对于样式,我以前实现的一个效果以下图所示::
函数
所以,有了重绘以及样式,就能实现高级、复杂的、优雅的UI效果;设计部有什么好的UI效果图,程序员就能把它实现。ui
QSS的主要功能是使界面的表现与界面的元素分离,使得设计成皮肤与界面控件分离的软件成为可能。QSS的概念、术语、语法很大程度上受到了CSS层叠样式表的影响;因为是所见即所得方式,QSS使用很方便插件
优先推荐使用文件加载方式,与代码脱离线程
class StyleSheetManager : public QObject
class StyleSheetManager : public QObject { Q_OBJECT public: explicit StyleSheetManager(QObject *parent = NULL); void setStyleSheets(int theme, const std::string& font); void setStylesForApp(int theme, const std::string& font); void setStyleSheetForPlugin(const QString& plgName, int theme); };
主要提供设置公共样式、插件样式的函数接口;与CQGUI框架的样式逻辑保持一致设计
CQGUI框架的样式文件集合以下图所示::
code
QString apppath = QString(":/style/style%1/app.qss").arg(theme); if (QFile::exists(apppath)) { QFile fileapp(apppath); if (fileapp.open(QFile::ReadOnly)) { qss.append(fileapp.readAll().data()); qApp->setStyleSheet(qss.toUtf8()); } }
QString styleSheetPath = QString(":/style/style%1/%2.qss").arg(theme).arg(plgName); if (QFile::exists(styleSheetPath)) { QFile file(styleSheetPath); //获取插件 QObject* plugin = UIGolbalManager::GetUIGolbalManager()->GetPluginInstanceQt(plgName); if (plugin) { auto *plug = dynamic_cast<UIPluginInterface *>(plugin); if (plug) { if (file.open(QFile::ReadOnly)) { QString qss = QString::fromUtf8(file.readAll()); plug->setStyleSheet(qss.toUtf8()); } } } }
今天就讲解到这里,更详细的代码分析与讲解,请关注微信公众号(itwenyinan),观看对应的的视频版讲解;谢谢