CQGUI框架之樣式管理


大家好,我是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),觀看對應的的視頻版講解;謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM