Qt:传递一个插槽来调用QML模板

时间:2016-01-13 16:29:08

标签: c++ qt qml

我正在尝试在Qt中做一些事情,我不确定这是可能的。我似乎无法找到任何关于它的文档,或者其他任何尝试在线进行的文档,但我不想放弃,除非有人能够确认它是不可能的。

我正在做的是创建一个QML模板,该模板将用于我的应用程序中的每个按钮。 QML项具有多个属性和属性别名,这些属性和属性别名在另一个QML文件使用模板时传入,用于定义按钮的工作方式。我想要做的是在按下按钮时将一个插槽传入模板。

以下是模板的简单示例及其工作原理:

Item {
    property variant onClickedAction
    property alias buttonImageSource: buttonImage.source

    Image {
        id: buttonImage
        MouseArea {
            anchors.fill: parent
            onClicked: onClickedAction()
        }
    }
}

以下是另一个QML文件如何使用该按钮模板(名为ExampleButtonTemplate.qml)的示例:

ExampleButtonTemplate {
    onClickedAction: ExampleSlot()
    buttonImageSource: "ExampleImage.png"
}

然而,当我以这种方式尝试时,它只是在加载使用模板的页面时调用插槽,而不是在按下按钮时。必须有一些方法可以通过属性传递一个我想稍后从一个QML文件调用到另一个QML文件的函数。如果有人可以解释这样做的方法或确认不可能像这样传递插槽,那将是一个很大的帮助。

2 个答案:

答案 0 :(得分:0)

更新:我通过这样做得到了它: 替换:

property variant onClickedAction

使用:

property var onClickedAction

并替换:

onClickedAction: ExampleSlot()

使用:

onClickedAction: ExampleSlot

答案 1 :(得分:0)

虽然这肯定是可能的,但为什么不只是&#34;转发&#34;信号并在使用地点处理它?<​​/ p>

基本上只需向最外面的项目添加信号

Item {
    id: button
    signal clicked()

    Image {
        MouseArea {
            onClicked: button.clicked()
        }
    }
}

然后你像任何内置信号一样使用它

ExampleButtonTemplate {
    onClicked: exampleSlot()
}