2017-04-26 103 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來替代,您可以使用它作爲基礎來創建所需的腳本。

希望這可以幫助你。