Qt 在Component.onCompleted qml中多次执行语句

Qt 在Component.onCompleted qml中多次执行语句,qt,qml,qt-quick,Qt,Qml,Qt Quick,我有一个矩形,在其中调用其oncompleted块上的语句。但是我不知道这个语句执行了3次而不是1次。这是我的密码 Rectangle { id: selector_button; signal clicked state: 'pressed' MouseArea { anchors.fill: parent; onPressed: { selector_button.state == 'pres

我有一个矩形,在其中调用其oncompleted块上的语句。但是我不知道这个语句执行了3次而不是1次。这是我的密码

Rectangle {

    id: selector_button;

    signal clicked  
    state: 'pressed'

    MouseArea {
        anchors.fill: parent;

        onPressed: {
            selector_button.state == 'pressed' ? selector_button.state = "" : selector_button.state = 'pressed';
            Current.currentData("Enbaled"); 
            selector_button.clicked();
        }
    }
    states: [
        State {
            name: "pressed"
            PropertyChanges { target: selector_button; color: "#fg08Rf" }
        }
    ]

    Component.onCompleted: {
        Current.currentData("Enabled"); */
    }
}
但是我在其他qml文件中也使用了这个组件,这是问题所在吗。。。?如果是,我应该在哪里调用此语句,以便它只执行一次
类似的事情也发生在一些onPropertyChanged上……知道我做错了什么吗?

这是因为状态快进,qml引擎在呈现阶段之前解析并初始化每个状态

参考文献。


这更像是QML的未定义行为,您的逻辑或值绑定不应该依赖于此“功能”

这里不完全清楚您在问什么。你是说你的onCompleted处理程序被调用了三次,尽管只启动了矩形一次?看起来onCompleted处理程序被调用了三次,这会造成真正的性能问题。再说一遍,这个组件在你的程序中是被实例化了一次,还是多次?我检查过了,这是组件多次实例化..这导致同一语句多次执行..每次创建矩形实例时都会调用component.onCompleted--您在这里看到的是预期的行为。顺便说一句,我刚刚测试了5.3 clang,只执行了一条语句。但这是真正的问题,这导致了真正的性能问题,例如,在Component.onCOmpleted处理程序中,我正在处理一些json字符串,如果它执行三次,肯定会增加延迟,应用程序将被删除slow@JNI_onLoad我建议的最简单的方法是将您的Qt升级到最新版本,但如果您锁定在某个特定版本上。1.删除qml内置状态属性,并推出您自己的。类似于:property bool state:true onPressed:{selector_button.state=false;selector_button.color=foo}或者如果您的fsm太复杂,请使用一些js库来保存js fsm,2。另一种方法是在一个单独的对象上处理json,在具有state属性的对象的范围之外,并在onComplete中进行赋值。