大家好,我是IT文藝男,來自一線大廠的一執行緒式員
今天給大家講解基于C++/Qt的CQGUI框架的樣式管理實作,
在Qt平臺,實作視窗/控制元件美化或者自定義效果,有如下兩種方式
- 重繪
- 樣式
對于重繪,我之前實作的一個效果如下圖所示::

對于樣式,我之前實作的一個效果如下圖所示::

因此,有了重繪以及樣式,就能實作高級、復雜的、優雅的UI效果;設計部有什么好的UI效果圖,程式員就能把它實作,
Qt樣式(Qt StyleSheet,QSS)
QSS的主要功能是使界面的表現與界面的元素分離,使得設計成皮膚與界面控制元件分離的軟體成為可能,QSS的概念、術語、語法很大程度上受到了CSS層疊樣式表的影響;由于是所見即所得方式,QSS使用很方便
樣式加載方式
- 在代碼中直接嵌入
- 通過檔案加載
優先推薦使用檔案加載方式,與代碼脫離
CQGUI框架樣式
- 公共樣式
- 插件樣式
一、類職責
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框架的樣式檔案集合如下圖所示::

四、加載公共樣式
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),觀看對應的的視頻版講解;謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/272757.html
標籤:其他
上一篇:C語言指標
