QML自定义按钮不能发出按下的信号,因为它不是一个功能?

问题描述 投票:0回答:1

我正在尝试实现一个自定义按钮,该按钮具有press()release()功能,在收到预期的按键事件时会调用这些按钮。在这些功能中,调用pressed()released()信号。 released()完美运行,但是当调用pressed()时显示错误:

TypeError: Property 'pressed' of object CustomButton_QMLTYPE_3(0x78214d8) is not a function

我的理论是QML无法区分Button的bool pressed属性和pressed()信号。这是一个错误还是我做错了什么?这是我所做的:

这是自定义按钮qml文件:

import QtQuick 2.10
import QtQuick.Controls 2.12

Button {
    id: control

    function press() {
        down = true;
        pressed();
    }

    function release() {
        down = false;
        released()
    }
}

在下面的示例中,当按下或释放F3键时,我调用了按钮功能,希望它们能够到达我进行的连接。

 CustomButton {
        id: customButton
        width: parent.width
        height: parent.height

        Connections {
            target: customButton
            onPressed: {
                console.log("Custom button pressed!\n");
            }

            onReleased: {
                console.log("Custom button released!\n")
            }
        }
    }

    focus: true
    Keys.onPressed: {
        if(event.key === Qt.Key_F3 && !event.isAutoRepeat) {
            console.log("F3 Key pressed!")
            customButton.press()
        }
    }

    Keys.onReleased: {
        if(event.key === Qt.Key_F3 && !event.isAutoRepeat) {
            console.log("F3 Key released!")
            customButton.release()
        }
    }

就像我说的那样,发布是可行的,但媒体是有问题的。我在控制台中看到这些行:

qml: F3 Key pressed!
qml: press function called
file:///D:/Projects/QmlExamples/qml/fxMenu/button/CustomButton.qml:10: TypeError: Property 'pressed' of object CustomButton_QMLTYPE_3(0x78214d8) is not a function
qml: F3 Key released!
qml: release function called
qml: Custom button released!
qt qml qtquick2 qtquickcontrols2
1个回答
0
投票

如果要手动发出按下的信号,请在您的Button对象中声明:

Button {
    id: control
    signal pressed;

    function press() {
        down = true;
        pressed();
    }

    function release() {
        down = false;
        released()
    }
}

除了信号,在AbstractButton(link)中还有一个名为“ pressed”的布尔属性,因此QML引擎似乎无法识别您的意图。

© www.soinside.com 2019 - 2024. All rights reserved.