作为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。 –