Qt動態加載圖片資源文件(資源文件與源代碼分離)

在最近的Qt相關項目開發中,有不同客戶提出更改logo圖片的需求,每次更換一張圖片需要重新添加到.qrc資源文件,並重新編譯源代碼生產可執行文件,操作效率極低,頻繁修改源代碼也 容易引起其他不可靠問題,故想把部分做成動態加載的形式。在網絡上查閱相關資料後解決了這一問題,總結一下以便以後參考查閱。

  我們大家都知道,在qt框架中,資源文件後綴名是以.qrc結尾的。它可以將我們的圖片文件、qml、與樣式表文件等裝進可執行程序中。我們將怎樣做呢?一般情況下,我們在Qt Creator項目右鍵添加新文件,選擇Qt Resource File。之後輸入名字,項目中就有資源管理文件了。

    .qrc文件裏是以xml格式管理資源文件的,如下:

   .qrc文件裏是以xml格式管理資源文件的,如下:

<RCC>
    <qresource prefix="/images">
        <file alias="icon">images/logo.ico</file>
        <file alias="title">images/title.png</file>
        <file alias="closeBtn">images/gb1.png</file>
    </qresource>
    <qresource prefix="/qss">
        <file alias="stylesheet">stylesheet.qss</file>
    </qresource>
    <qresource prefix="/SearchItem">
        <file alias="SearchItemFile">SearchItem/SearchItemColor.dat</file>
    </qresource>
</RCC>

    這裏面有三種文件:圖片(圖標)、.qss(樣式表)、.dat文件格式。

    使用的時候我們有兩種方式:

  1. :/images/title.png        (eg:    QPixmap image0("://image/navigation.png");  QPixmap image = image0.scaled(QSize(pt2px(64), pt2px(64)));QIcon icon = QIcon(image);)   

  2. qrc:///images/title.png </span>   

此路徑就是圖片文件在qrc文件中的路徑。

爲了更好地保護我們的圖片安全,我們應該儘可能的將項目的功能源碼與資源文件分離開來,如果只是改變圖標之類的改變,就不需要重新編譯源代碼了。具體我們該怎樣做呢?

1.使用QT Creator 新建一個資源文件.qrc。這時候,這個資源文件並不是屬於任何項目的。

2.在.qrc存放的目錄下新建images文件夾(用於存放項目所有的圖片)與styleSheet文件夾(用於存放樣式表文件.qss)。

(文件存放的路徑可自定義)

3.用qt creator打開resource.qrc,然後將images文件夾與qss文件夾裏的所有文件添加到qrc文件裏。

4.使用rcc 命令將resource.qrc生成.rcc二進制文件。

rcc --binary resource.qrc -o skin.rcc(Windows)    (Linux下執行命令爲rcc -binary resource.qrc -o skin.rcc)

至此,我們的資源文件已經分離開並且已經做成了二進制文件。那麼程序中怎樣使用的呢?

5.在項目的可執行目錄下新建skin文件夾。將生成的skin.rcc放到skin文件夾裏。

6.在qt程序啓動的時候,加載一下資源文件

QResource::registerResource(qApp->applicationDirPath() + "/skin/skin.rcc");  
    QFile file(":/qss/stylesheet");  
    if(file.open(QFile::ReadOnly))  
    {  
      QString strStyleSheet = file.readAll();  
      file.close();  
      qApp->setStyleSheet(strStyleSheet);  
    }
 好了,到這裏我們就完成了所有工作,將資源文件與源碼文件完全分離開來,如果只是更換資源文件,就不用重新編譯主程序了,只需重新生成skin.rcc文件,然後替換一下就大功告成了!

以上方法親測可行,感謝網友分享!文章原地址:https://blog.csdn.net/xiezhongyuan07/article/details/79396680 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章