質問

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の説明については、こちらをご覧ください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top