首页 > 解决方案 > QML TabView 创建顺序

问题描述

在 QML 中使用以下代码:

import QtQuick 2.14
import QtQuick.Controls 1.4

TabView {
    Tab {
        id: firstTab
        Component.onCompleted: {
            console.log("1")
        }
        Rectangle {
            id: firstTabRectangle
            Component.onCompleted: {
                console.log("2")
            }
        }
    }
    Tab {
        id: secondTab
        Component.onCompleted: {
            console.log("3")
        }
        Rectangle {
            id: secondTabRectangle
            Component.onCompleted: {
                console.log("4")
            }
        }
    }
}

现在的问题是:

执行代码时控制台打印什么?

我会猜到

1 (firstTab)
2 (firstTabRectangle)
3 (secondTab)

但结果是:

3 (secondTab)
1 (firstTab)
2 (firstTabRectangle)

我知道“4”没有被创建,因为我们看到firstTab“1”和firstTabRectangle“2”。因此secondTabRectangle,在我们想要切换到选项卡之前,永远不会创建“2”。

标签: qtqml

解决方案


根据有关completed信号的文档,我有一个坏消息要告诉你,我的朋友:

运行处理程序的顺序未定义。

所以最好不要依赖它的顺序。


推荐阅读