在最近的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文件格式。
使用的時候我們有兩種方式:
-
:/images/title.png (eg: QPixmap image0("://image/navigation.png"); QPixmap image = image0.scaled(QSize(pt2px(64), pt2px(64)));QIcon icon = QIcon(image);)
-
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