为什么动态组件创建中的属性绑定不起作用?

如何解决为什么动态组件创建中的属性绑定不起作用?

信号 'clearPinFromDevManager(const QString& pinn)' 将从 cpp 文件中重复发出。在ClearPinFromDevManager:{} 上捕获的信号,所以cpp 和main.qml 文件中的所有内容都正常,但“recvClearPin”未绑定到动态创建的PasswordWindow.qml 组件。

注意:如果代码有问题,您解决问题的方法是什么?谢谢

Main.qml

import QtQuick 2.12
import QtQuick.Window 2.12
import Terminal 1.0
import QtQuick.Controls 2.12


applicationwindow  {
id: rootId
visible: true
objectName: "window"
width: Screen.width
height: Screen.height
flags: Qt.FramelessWindowHint

property var component
property var object
property string recvClearPin:""

Rectangle {
    id:rootRectId
    width: rootId.width
    height: rootId.height - headerId.height
    color: "#000033"
}

Terminal {
    id: terminalId

    onSignalToInitTerminal:{
         console.log("show Password window.")
            component= Qt.createComponent("Ui/PasswordWindow.qml");
            object=component.createObject(rootRectId,{clearPin: recvClearPin});
    }

 //signal will emit repeatedly
 onClearPinFromDevManager:{
        console.log("signal emited here and pinn is:",pinn)
        recvClearPin=pinn
    }
    
 }
}

密码窗口.qml

import QtQuick 2.12
import QtQuick.Controls 2.12
import "../DeFinitions.js" as DeFinitions


Item {
id:passwordWindowId
width: parent.width


    property string password: ""
property alias clearPin: textEditId.text

Text {
    id: passwordWindowTextId
    font.family: DeFinitions.LABEL_FONT_FAMILY; font.pointSize: DeFinitions.LABEL_POINT_SIZE
    text: qsTr("لطفا رمز خود را وارد نمایید")
    color: DeFinitions.LABEL_COLOR
    y: DeFinitions.PAGE_TITLE_Y_POS
    x: DeFinitions.PAGE_TITLE_X_POS
}

Rectangle {
    id: textEditRectId
    x: passwordWindowTextId.x +10
    y: passwordWindowTextId.y + height
    width: DeFinitions.TEXT_EDIT_WIDTH
    height: DeFinitions.TEXT_EDIT_HEIGHT
    border.width: 1
    border.color: "#000000"
    radius: 10
    color: DeFinitions.GENERAL_COLOR

    TextEdit {
        id: textEditId
        width: parent.width
        height: parent.height
        text: ""
        font.family: DeFinitions.GENERAL_FONT_FAMILY; font.pointSize: DeFinitions.GENERAL_POINT_SIZE
        color: "blue"
        focus: true
        verticalAlignment: TextEdit.AlignVCenter
        horizontalAlignment: TextEdit.AlignHCenter

        onTextChanged: {
            console.log("texttttttttttttttttt:",text);
        }
    }

}

}

解决方法

请提供信号 clearPinFromDevManager(const QString& pinn) 连接的更多信息。

对于动态对象,您应该使用 QML 中的连接语法和 cpp-objects。

您需要在 QML 中注册包含 clearPinFromDevManager(const QString& pinn) 的类,然后将其连接到动态创建的对象,或在 onComleted-handler 中,如下所示:

  1. 在 CPP/H 中声明您的课程:

    class CrearPinObject : public QObject {
       Q_OBJECT
    
       signals:
          void clearPinFromDevManager(const QString& pinn);
    }
    
  2. 注册 QML 引擎 main.cpp(或类似):

    ...
    
    QQmlApplicationEngine engine;
    
    engine.rootContext()->setContextProperty("CrearPinObjectView",new CrearPinObject);
    
    ...
    
  3. 使用 QML 连接语法(PasswordWindow.qml)连接信号:

    Item {
    
       Component.onCompleted: {
    
         // CrearPinObjectView-object forward automatically
         CrearPinObjectView.clearPinFromDevManager.connect(clearPinFromDevManager);
       }
    
       function clearPinFromDevManager(pinn) {
    
          console.log(pinn);
       }
    }
    

希望有所帮助!

,

您没有绑定此行中的 clearPinobject=component.createObject(rootRectId,{clearPin: recvClearPin});。相反,您使用名为“clearPin”的项目创建一个 Json 对象,该项目的当前值为“recvClearPin”。如果您需要绑定,请使用 Qt.binding:

object=component.createObject(rootRectId,{clearPin: Qt.binding(function() { return recvClearPing} )});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?