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

Qt 对QML文件的更改何时不生效?,qt,qt-creator,qmake,Qt,Qt Creator,Qmake,上周我第二次遇到了问题。这似乎是随机发生的。我在QML文件中更改了一些内容,保存它,运行应用程序,然后发现我的更改没有生效。我重新运行应用程序,但它仍然没有生效 我第一次遇到这种情况时,在我做了一些git的事情后,它被自己修复了(顺序是:git stash save,回滚到旧版本,返回到最新版本,git stash pop)。第二次我没有这样做,但是从QtCreator菜单运行qmake,这就解决了它 问题的原因是什么? 我使用的是Qt Creator 4.1.0。Stephan我已经看到了这种

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

我第一次遇到这种情况时,在我做了一些git的事情后,它被自己修复了(顺序是:
git stash save
,回滚到旧版本,返回到最新版本,
git stash pop
)。第二次我没有这样做,但是从QtCreator菜单运行qmake,这就解决了它

问题的原因是什么?


我使用的是Qt Creator 4.1.0。

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

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


似乎这些问题不会得到解决,但它已经存在多年了,qtcreator中的解决方法是在重建后手动运行qmake。

尽管每次运行前都努力运行qmake,但我还是再次遇到了这个问题

我想这次我找到了原因。我使用的是“应用程序输出”窗格工具栏中的小运行按钮(实际上称为“重新运行此运行配置”)。似乎此按钮具有运行而不重建的危险属性

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



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

对于qml文件更改,仅运行qmake似乎就足够了。我怀疑这是同一种类型的bug,它需要一次清理和重建C++代码。我同意,但是这非常令人讨厌,因为它对于UI开发来说是不可预测的,这是个问题。因此,我将尝试编译一个案例列表,它将发生并共享:),因此,即使是手动操作,我们也可以知道qmake需要运行的所有案例:)qmake通常不需要运行,除非项目设置中发生了更改。根据生成系统(例如make),生成的文件应具有所有必要的更新规则,并且生成工具应检测更改和运行所需的生成链。因此,这在一定程度上取决于用于构建的工具以及它如何检测变化我同意@KevinKrammer,当然我们需要说这实际上是一个QtCreator bug(这是qt应用程序的主要开发工具),而不是一般的qt。Qtcreator通常在生成运行qmake和make时定义2个步骤,问题是这两个步骤并不总是运行,通常make是唯一正在运行的步骤,除非您更改.pro(这将导致运行qmake步骤)。问题是QtCreator(根据我的经验)往往无法检测到qrc上的一些修改,这些修改也需要qmake才能运行(我需要调查并尝试更多以确定具体情况)。不,QtCreator不需要手动重新运行qmake,生成的makfile应该有规则来做到这一点。就像对.pro文件的更改一样。毕竟,这是构建工具(如make)的主要任务之一,以了解要再次运行哪些命令。如果qmake中存在问题,则更有可能无法生成正确的make规则。自从我使用Qt以来,它就一直存在该问题,现在已经将近7年了,甚至在QML之前,您必须偶尔清理和重建所有内容,以反映更改。想知道修复它还需要多少年……您是否正在从资源加载QML文件?如果是,你重建了吗?一般来说,我只会在开发过程中使用直接文件访问,因为这允许在应用程序运行时重新加载running@KevinKrammer:从资源加载,是。“Run”命令通常会在发生更改时自动重建我的项目,因此我没有手动重建,而是假设创建者会为我重建。它通常会这样做,或者更确切地说,构建系统会这样做,例如make/nmake/jom/ninja。QML文件是在资源文件中列出的还是使用某种文件模式?@kevinkramer:qrc文件列出了当前我的所有QML文件。不过,我不知道在问题发生的那一刻这是否属实。