2017-04-26 74 views
1

我在一个曾经拥有编译资源的项目。现在使用外部二进制资源

,用户可以选择他想要的工作的主题。直到那里没有问题,在一些研究中,我开始使用External Binary Resource方法。

我的资源是构建成功和QResource::registerResource("/path/to/myresource.rcc");返回true。

它不能正常工作,但。显然,编译后的资源仍然存在于可执行文件中。我看不到存储在我的外部二进制资源中的不同图标。

我如何删除这个编译时的资源?我需要这样做才能正常工作吗?

回答

2

假设您正在为项目使用.pro文件,则需要从RESOURCES列表中删除资源文件。如果您仍然希望将其列入您的项目中,则可以使用OTHER_FILES

前:

RESOURCES += file1.qrc file2.qrc 

后:

RESOURCES += file2.qrc 
OTHER_FILES += file1.qrc 

如果你想走得更远了一步,你可以自动的QRC文件编译:

RCC_BINARY_SOURCES += file1.qrc 

asset_builder.commands = $$[QT_HOST_BINS]/rcc -binary ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT} -no-compress 
asset_builder.depend_command = $$[QT_HOST_BINS]/rcc -list $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} 
asset_builder.input = RCC_BINARY_SOURCES 
asset_builder.output = $$OUT_PWD/$$DESTDIR/${QMAKE_FILE_IN_BASE}.qrb 
asset_builder.CONFIG += no_link target_predeps 
QMAKE_EXTRA_COMPILERS += asset_builder 

OTHER_FILES += $$RCC_BINARY_SOURCES 
+0

它工作,谢谢! –

1

你必须改变资源被编译的方式。默认情况下,包含在Qt工程的每一个资源文件(resources.qrc,例如)是编译到C++代码(qrc_resources.cpp你可能编译项目后可见)。这使得资源被编译并链接到你的可执行文件(或库)。 Qt for Visual Studio插件正是这样做的:为每个QRC文件添加一个自定义构建步骤。打开QRC文件来看看的特性(在QRC文件上右键单击,然后属性):

Default compilation of a QRC file

  • 命令行:"$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp
  • 输出:.\GeneratedFiles\qrc_%(Filename).cpp
  • %(Filename)是,正如你可以看出,该文件的扩展名较少的名称

要避免此行为,只需从项目中删除QRC文件。当然,问题是您必须手动构建.rcc文件。你可以使用脚本作为你的makefile的一部分。另一方面,如果您使用的是Visual Studio,则可以更改用于编译它的命令,将-binary选项添加到rcc工具中,以便将其编译为外部文件。通过这种方式,将包含在你平时的编辑工作流程: Custom compilation of QRC to RCC

  • 命令行:"$(QTDIR)\bin\rcc.exe" -name "%(Filename)" "%(FullPath)" -binary -o "%(Outputs)"
  • 输出:$(OutDir)\%(Filename).rcc - 这是从截图不同,因为我把它从现有项目,使用一个在将RCC文件放置在可执行文件的相同目录中的文本。

重要提示:请确保您更改了所有配置的构建工具。

如果您使用makefile或Qt Creator来替代,您可以使用它作为基础来创建所需的脚本。

希望这可以帮助你。