我基于Qt 5.9.3创建了一个新的QML项目。我用一个Button和我自己的按钮(MyButton)设置了一个简单的ApplicationWindow,我从来没有得到onClicked()事件来触发(显然)它们中的任何一个。弹出我的应用程序窗口,显示2个按钮。单击其中任何一个都不会在我的控制台输出中显示任何内容。
我还在.pro文件中预编译我的qml源文件,如果这很重要的话。我在启动时遇到一些字体错误,我在C ++中修复了 得到一些字体,所以我可以看到一些东西,除了没有 错误或警告。我花了几个小时试图搞清楚 鼠标点击事件没有运气。
感谢任何帮助。
这是我的main.qml:
import QtQuick 2.7
import QtQuick.Controls 2.0
ApplicationWindow {
visible: true
width: 640
height: 480
title: "App Title"
color: "white"
Button {
text: "Button"
onClicked: {
console.log("clicked")
}
}
MyButton {
anchors.right: parent.right
anchors.top: parent.top
onClicked: {
console.log("my button clicked")
}
}
}
和MyButton.qml
import QtQuick 2.7
Rectangle {
id: button
width: 100
height: 50
color: "yellow"
signal clicked()
MouseArea {
id: mouseArea
anchors.fill: button
visible: false
enabled: true
onClicked: {
console.log("my button mouse clicked")
clicked()
}
}
}
更新:我做了一件非常愚蠢的事。在我的main.cpp文件中,我做了 不包括我以为我会更干净并移动我的QQmlEngine初始化代码 进入自己独立的方法。当然,当引擎参考时 超出范围会导致我的问题。我没有看到那里,因为我错误地认为如果出现问题,qml代码将无法正常工作。很抱歉这么晚才回到这里,这是一个非常忙碌的一周,很抱歉浪费带宽。感谢您提供了很好的调试建议以供将来参考!
答案 0 :(得分:1)
我不知道QtQuick.Controls 2.0中Button
的问题 - 它对我来说非常适合。
使用您自己的MyButton
实现,这对我也不起作用。
原因是visible: false
会停用MouseArea
(及其所有子项) - 设置enabled: true
不会改变它。
无论如何设置visible: false
是不必要的,因为MouseArea
没有任何东西可以呈现 - 效率不可见。
更改后,您应该收到警告:
Error: Insufficient arguments
当您调用需要参数(clicked
)的MouseArea
的信号MouseEvent
时。要拨打自定义信号,请拨打button.clicked()
而不是。
如果您仍然没有做任何事情,则需要采取进一步的调试步骤。
检查您是否可以使用console.log
生成任何输出,例如将Component.onComplete: console.log("Output works")
添加到您的某个对象。
点击Rectangle
时更改MouseArea
的颜色,检查输入是否确实损坏:color: (mouseArea.pressed ? 'red' : 'green')
如果eventFilter
已注册,请在QGuiApplication
(使用C ++)安装MouseEvent
以打印内容。