我正在尝试实现一个自定义按钮,该按钮具有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!
如果要手动发出按下的信号,请在您的Button对象中声明:
Button {
id: control
signal pressed;
function press() {
down = true;
pressed();
}
function release() {
down = false;
released()
}
}
除了信号,在AbstractButton(link)中还有一个名为“ pressed”的布尔属性,因此QML引擎似乎无法识别您的意图。