【问题标题】:qml component connects with signalqml 组件与信号连接
【发布时间】:2018-05-17 19:36:27
【问题描述】:

我在 qml 中声明了一个组件/委托,我想将它的一个操作连接到另一个 qml 或 C++ 类中的信号。所以,组件看起来像这样:

Component
{
     id: mainButtonDelegate
     Button {
        id: buttonOperation
        text: qsTr(buttonText)         
        buttonEnabled: false
        onIsEnableChanged:
        {
            buttonEnabled = cppRegisteredClass.isButtonEnabled(text)
        }
    }  
}

我可以为组件创建连接(因此为每个按钮),就像 Qt 中表达的以下内容? connect(loginForm, SIGNAL(loginChanged()), this, SLOT(onIsEnableChanged()))

我的模型是一个以 qml 文件表示的 ListModel。

编辑

如果这不是正确的方法,有人可以建议我另一种方法来做这样的事情吗?

【问题讨论】:

  • 您可以连接一个项目实例,而不是ComponentComponent 只是一个原型。查看Connections 类型。更多信息可以找到here
  • 那么我如何将每个项目与所需的信号/插槽连接起来?在模型中?然后我必须写 onIsEnableChanged:{... 很多次
  • 在您的示例中,您只需要编写一次,因为它在委托中,并且对于mainButtonDelegate 的每个实例都会像这样自动连接 - 您还想要什么?跨度>
  • derM,非常感谢您的帮助,但是我已经测试了您的建议,但它不起作用。你自己做过这样的测试吗?

标签: c++ qml


【解决方案1】:

我正在发布我是如何完成我想要的,只是如果其他人需要这个。 我在模型中添加了一个函数并使用了 set 属性。

function action()
{
    for(var i= 0; i<count; ++i)
    {
        if(backend.disable())
        {
            setProperty(i, "enable", false)
            setProperty(i, "opac", 0.3)
        }
        else
        {
            setProperty(i, "enable", true)
            setProperty(i, "opac", 1)
        }
    }
}

在组件中(在 Item 父级内),我添加了:

            LoginForm{
            id: loginForm
            onLoginIdentityChanged: {
                mymodel.action()
            }

【讨论】:

    【解决方案2】:

    您可以使用Connections-object。

    你的表达将被翻译成:

    Connections {
        target: loginForm
        onLoginChanged: whatIsThis.onIsEnabledChanged()
    }
    

    您也可以使用 JS 连接语法: http://doc.qt.io/qt-5/qtqml-syntax-signals.html#connecting-signals-to-methods-and-signals

    你的表达将转化为:

    loginForm.loginChanged.connect(this.onIsEnabledChanged)
    

    【讨论】:

    • 你认为应该在 'whatIsThis' 中输入什么?按钮的id?因为我添加了id,qml说没有onIsEnabledChanged函数。我还添加了:按钮中的信号 isEnableChanged()
    • 在您的expression 中,您连接到一个名为onIsEnabledChagend 的插槽,该插槽由this 引用。在Connections-object 中,您不能使用this,因为那将是Connections-object。相反,您需要在示例中使用 this 的 id。
    • 如前所述,如果我在那里设置按钮的id,我会发现没有这样的功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多