作爲Qt設計器黑客攻擊的一部分,我對運行時刪除資源感興趣(特別是:/trolltech/widgetbox/widgetbox.xml
)。有關上下文的更多詳細信息,請參閱帖子的末尾。在運行時去除/修改靜態Qt資源
我明顯的(和失敗)的嘗試是:
QFile(":/trolltech/widgetbox/widgetbox.xml").remove();
但它返回一個錯誤。
我的下一個嘗試是使用Q_CLEANUP_RESOURCE(widgetbox)
,但擴展到的功能僅在Qt Designer(QDesignerComponents)的專用組件中可用。
的另一種嘗試是清除文件的內容,但它是隻讀的:
QFile f(":/trolltech/widgetbox/widgetbox.xml");
if (f.open(QFile::WriteOnly)) { ... } // returns false
我也試着通過定義自己:/trolltech/widgetbox/widgetbox.xml
覆蓋它在Qt的資源的文件系統。我可以打開文件,但無法檢索數據,我猜是因爲它是一個重複的資源(將資源別名爲未使用的名稱會使應用程序正確打印內容)。另一方面,小部件列表正確呈現。
QFile f(":/trolltech/widgetbox/widgetbox.xml");
if (f.open(QFile::ReadOnly)) {
qDebug() << "{";
qDebug() << f.readAll(); // shows nothing
qDebug() << "}";
}
有什麼方法可以在運行時修改/刪除/替換資源文件嗎?
在這種情況下,你認爲這是一個XY problem我將解釋整個來龍去脈:我整合Qt設計到我自己的IDE通過使小的調整,以獨立的一個。基本上,我添加了一個編譯標誌來生成動態庫而不是可執行文件,並添加了一些選項來顯示主窗口。
在此IDE中,我想添加一個選項以避免用戶使用默認窗口小部件並將列表限制爲一組自定義窗口。我提到的資源是默認情況下包含Qt Designer中可用的小部件列表的文件。其他小部件可以通過插件輕鬆包含,但是我還沒有找到刪除默認小部件的方法。
我的一個選擇是使該加載可選,但它會通過許多項目產生級聯的變化。我想避免修改Qt設計器。
Thanks @ kuba-ober!我會看看文件引擎和'registerResource',它會花費我一些時間來測試,但我會告訴你! – cbuchart
順便說一下,關於修改,客戶希望能夠遷移到Qt_的未來版本,所以我想盡可能快地趕上更新版本的Qt以減少工作量。 – cbuchart
您可以設置一個專用的git源代碼庫來跟蹤qt基礎庫的設計器文件夾。使用[稀疏結帳](https://stackoverflow.com/questions/4114887/is-it-possible-to-do-a-sparse-checkout-without-checking-out-the-whole-repository)和淺拉只拉所需的代碼。然後將您的更改添加到存儲庫。當需要升級到更新的Qt版本時,重新分配你的分支。您可能會遇到一些衝突,但這些衝突只會在Qt代碼和代碼更改重疊的情況下發生。您可以將該項目添加爲項目的git倉庫的子模塊。沒有git = SOL。 –