0

我将我的 QML 应用程序从 Qt 5.12 更新到了 Qt 5.15。

我的应用程序使用以下代码加载其 qml 源代码:

auto* engine = new QQmlApplicationEngine(this);
...
engine->load(QUrl("qrc:/main.qml"));

engine->load被调用时,我现在收到以下警告,这在 Qt 5.12 中没有:

Qt Quick Layouts:检测到递归重新排列。两次迭代后中止。

如何找到此警告的来源以便修复我的代码?

编辑:

在两次否决之后,我想澄清我的问题的意图。

我有一个非常大的应用程序,它正在加载一个很大的 qml 文件树,main.qml 是主窗口。我发布的警告来自应用程序输出窗格,没有任何提示导致警告的源文件位置。

我正在寻找一种方法来找到导致这种警告的源文件位置。我相信问如何实现这一点是合理的,而且我相信这是许多将 qml 代码更新到 Qt 5.15 的人都会遇到的普遍问题。此类问题的性质是无法提供独立的示例(如评论中要求的)。

4

1 回答 1

1

这是一个完全合理的问题——警告是模棱两可的,所以你必须发布整个代码库才能获得最低限度的可行。Afaik 没有合理的方法以编程方式定位有问题的位,而是查找嵌套在同一种布局组件内的布局组件(RowLayout、ColumnLayout、GridLayout);这些是通常的罪犯。例如:

ColumnLayout {

    ColumnLayout {
        id: childColumnLayout

        // this is generally the cause of your grief
        // changing the the child ColumnLayout to a Column usually fixes it for me

    }
}
于 2020-11-05T21:37:26.647 回答