QML 文件的更改何时不生效?

Posted

技术标签:

【中文标题】QML 文件的更改何时不生效?【英文标题】:When do changes to a QML file not take effect? 【发布时间】:2016-11-25 18:26:29 【问题描述】:

上周我第二次遇到问题。这似乎是随机发生的。我更改了 QML 文件中的某些内容,保存它,运行应用程序,然后看到我的更改没有生效。我重新运行应用程序,它仍然没有生效。

这是第一次发生在我身上,在我做了一些 git 操作后它自己修复了(按此顺序:git stash save,回滚到旧版本,回到最新版本,git stash pop)。第二次我没有这样做,而是从 Qt Creator 菜单运行 qmake 并修复了它。

问题的原因可能是什么?

我正在使用 Qt Creator 4.1.0。

【问题讨论】:

Qt 自从我使用它以来就一直存在这个问题,到现在已经快 7 年了,甚至在 QML 之前,你不得不偶尔清理和重建所有内容以反映更改。不知道还需要多少年才能修复它... 您是从资源中加载 QML 文件吗?如果有,你重建了吗?一般来说,我只会在开发过程中使用直接文件访问,因为这甚至允许在应用程序运行时重新加载 @KevinKrammer:从资源加载,是的。 “运行”命令通常会在有更改时自动重建我的项目,所以我没有手动重建,而是假设 Creator 会为我完成。 通常是这样,或者更确切地说,有问题的构建系统是这样,例如制作/nmake/jom/忍者。 QML 文件是在资源文件中列出还是使用某种文件模式? @KevinKrammer:qrc 文件列出了我目前所有的 QML 文件。不过,我不知道问题发生时是否属实。 【参考方案1】:

Stephan 我已经看到了这种情况,从我之前阅读的内容来看,这是一个已知的错误,更多信息可以在以下位置找到:

https://bugreports.qt.io/browse/QTCREATORBUG-1627

问题是 qtcreator 似乎无法检测到正在更改的 qlm/qrc 文件的更改,因此由于未运行 qmake,因此未更新 makefile。

似乎它们不会被解决错误,它已经存在多年了,qtcreator 中的解决方法是在重建后手动运行 qmake。

【讨论】:

对于 qml 文件更改,仅运行 qmake 似乎就足够了。我怀疑这是同一类型的错误,需要每隔一段时间清理和重建所有 c++ 代码。 我同意,但很烦人的事实是这种情况的发生,好像 UI 开发的不可预测是一个问题。所以我将尝试编译它发生的案例列表并将其分享回来:),所以即使它是手动的,我们也可以知道所有需要运行 qmake 的案例:) qmake 通常不需要运行,除非项目设置中的某些内容发生了变化。取决于构建系统,例如make,生成的文件应该具有所有必要的更新规则,并且构建工具应该检测更改和运行所需的构建链。所以这在一定程度上取决于用于构建的工具以及它如何检测变化 我同意@KevinKrammer,当然我们需要说这实际上是一个 QtCreator 错误(这是 qt 应用程序的主要开发工具),而不是一般的 Qt。 Qtcreator 通常在构建运行 qmake 和 make 时定义 2 个步骤,问题是两者并不总是运行,通常只有 make 是运行的,除非您对 .pro 进行更改(这将导致运行 qmake 步骤) .问题是 QtCreator(根据我的经验)往往无法检测到 qrc 上的一些修改,这些修改也应该需要 qmake 才能运行(我需要调查并尝试更多以查明具体情况)。 不,QtCreator 不需要手动重新运行 qmake,生成的 makfile 应该有规则来做到这一点。就像它对 .pro 文件的更改所做的那样。毕竟是构建工具的主要工作之一,例如知道要再次运行哪些命令。如果出现问题,很可能是 qmake 没有生成正确的 make 规则。【参考方案2】:

我又遇到了这个问题,这次尽管在每次运行之前都努力运行 qmake。

我想我这次知道是什么原因造成的了。我使用的是位于“应用程序输出”窗格工具栏中的小运行按钮(实际上称为“重新运行此运行配置”)。似乎这个按钮具有运行无需重建的危险属性。

解决方案是使用 Ctrl+R,或者等效地使用窗口左侧垂直工具栏中的大运行按钮。


在我删除 myproject.pro.user 文件之前,问题不会消失。

【讨论】:

以上是关于QML 文件的更改何时不生效?的主要内容,如果未能解决你的问题,请参考以下文章

weblogic下更改jsp不生效的解决办法

mysql的索引何时生效

JDK版本更改,修改环境变量不生效

git 修改 .gitignore 不生效

.htaccess 更改需要多长时间才能生效?

apache修改jsp不生效