2016-05-17 117 views
0

我的應用程序需要一個12 MB的文本文件作爲內置資源。我驚訝地發現由此產生的可執行文件有點超過了12 MB,所以我在命令行嘗試zip,它只降低了68%,低於70%的閾值。Qt資源系統rcc選項和bz2?

bz2使其縮小。有沒有一種方法可以使用該壓縮,或者更好的方法?我確定純文本文件用於壓縮非常好。

我不清楚如何降低Makefile中的'閾值'。 rcc -h說:

--threshold <level> Threshold to consider compressing files. 

所以這會轉化爲--threshold="70%"

+0

這是Qt編碼器抱怨缺乏合適的壓縮API的地方。 'qCompress'不算。 –

回答

0

首先,documentation-threshold標誌:

指定的閾值水平(以百分比表示)決定是否壓縮文件時使用。如果文件大小的減少大於閾值級別,則將其壓縮;否則,存儲未壓縮的數據。默認閾值爲70%,這意味着壓縮文件的原始大小的30%或更少被存儲爲壓縮數據。

根據讀取,您有兩種選擇:使用默認zlib壓縮並手動設置閾值,或者自己設置壓縮級別。

爲了提高壓縮級別最大:

rcc -level 9 ... 

或提高壓縮閾值只是足夠:

rcc -threshold 35% ... 

您可以將二者結合起來,當然。默認的壓縮級別是-1,這意味着zlib決定壓縮的程度。

編輯:討論壓縮時,文檔本身矛盾(或者可能根本不清楚)。 Here它採用積分值,而不是爲-threshold標誌的百分比:

rcc -compress 2 -threshold 3 

一些測試要求。

0

感謝您的回答喬恩。我通過向我的文件添加大量空白來測試。足以讓通過命令行zip報告的通貨緊縮達到71%,並且生成的可執行文件下降到4.6 MB,所以理論是正確的。

rcc似乎只產生一個類似於XML的輸出,但接受-threshold和-compress選項。沒有語法錯誤報告,任何值都可以接受。

我不確定在makefile中放置閾值選項的位置。引用我的文件的部分:

qrc_meresource.o: qrc_meresource.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_meresource.o qrc_meresource.cpp 我試過把rcc可以接受的選項放在各個地方。全部被拒絕。

這一行定義CXXFLAGS: CXXFLAGS = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES)

我甚至試圖改變 'COMPRESS = gzip的-9f' 行 'COMPRESS = bzip2的-9f',但結果卻沒有什麼不同。

+0

立即獲取。像'rcc -threshold 50 -binary res.qrc -o res.bin'或'rcc -threshold 50 res.qrc -o res.cpp'這樣的命令按照需要工作。再次感謝。 –