Qtでリソースファイルをマップする方法は?
-
05-07-2019 - |
質問
Qtでリソースファイルをマップすることは可能ですか?
例:
QFile file(resource_name);
file.open(QIODevice::ReadOnly);
uchar* ptr = file.map(0, file.size());
これを試すと、 ptr == 0 、エラーを示します。
通常のファイルをマップしようとするとうまくいきます。
QFile :: Map
をサポートするLinuxでQtを実行しています。
解決
はい、可能です。ただし、留意すべきことが1つあります。デフォルトでは、qtリソースコンパイラ rcc はリソースを圧縮します。
file.size()呼び出しは、元のファイルの実際の非圧縮サイズを返します。ただし、埋め込みリソースは圧縮されており、おそらく異なるサイズです。 file.map(0、file.size())は、map()に渡されるサイズがマップされているリソースよりも大きいため、エラーを返します。 map()に正しいサイズ、またはそれより小さなサイズを渡しても、メモリには圧縮されていないデータではなく、圧縮されたデータが含まれます。
解決策は、埋め込みリソースを圧縮しないことです。これは以下を追加することで実現できます:
QMAKE_RESOURCE_FLAGS += -no-compress
qtプロジェクトファイルに。 QMAKE_RESOURCE_FLAGSの説明については、こちらをご覧ください。
所属していません StackOverflow