Button qml按钮未启动,与MouseArea相同
我基于Qt5.9.3创建了一个新的QML项目。我用一个按钮和我自己的按钮(MyButton)设置了一个简单的应用程序窗口,但我从来没有为它们中的任何一个触发过onClicked()事件。“我的应用程序”窗口弹出,显示两个按钮。单击其中任何一个都不会在我的控制台输出中显示任何内容 我也在.pro文件中预编译我的qml源文件,如果这很重要的话。在启动时我在C++中修复了一些字体错误 使用一些字体,这样我就可以看到一些东西,除了没有 错误或警告。我花了几个小时只是想找个简单的 鼠标点击事件,没有运气 感谢您的帮助 这是我的main.qml:Button qml按钮未启动,与MouseArea相同,button,qml,applicationwindow,mousearea,Button,Qml,Applicationwindow,Mousearea,我基于Qt5.9.3创建了一个新的QML项目。我用一个按钮和我自己的按钮(MyButton)设置了一个简单的应用程序窗口,但我从来没有为它们中的任何一个触发过onClicked()事件。“我的应用程序”窗口弹出,显示两个按钮。单击其中任何一个都不会在我的控制台输出中显示任何内容 我也在.pro文件中预编译我的qml源文件,如果这很重要的话。在启动时我在C++中修复了一些字体错误 使用一些字体,这样我就可以看到一些东西,除了没有 错误或警告。我花了几个小时只是想找个简单的 鼠标点击事件,没有运气
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代码根本不会工作。很抱歉这么晚才回来,这是非常繁忙的一周,很抱歉浪费了带宽。感谢您提供的大量调试建议,以供将来参考 我不知道QtQuick.Controls 2.0中的
按钮有什么问题-它对我来说非常适合
使用您自己的MyButton
实现,这对我也不起作用
原因是visible:false
将停用MouseArea
(及其所有子项)-设置enabled:true
不会改变此设置。
设置visible:false
无论如何都是不必要的,因为MouseArea
没有任何可渲染的内容-实际上是不可见的
一旦你改变了,你应该得到一个警告:
错误:参数不足
调用需要参数(MouseEvent
)的MouseArea
的信号时,单击该信号。要调用自定义信号,请调用按钮。改为单击()
。R
如果仍然没有得到任何消息,则需要采取进一步的调试步骤
检查是否可以使用console.log
生成任何输出,例如,将complete:console.log(“输出工作”)
添加到一个对象中
单击MouseArea
时,通过更改矩形的颜色来检查您的输入是否真的中断:color:(MouseArea.pressed?'red':'green')
如果注册了MouseEvent
,请将eventFilter
安装到qgui应用程序中(在C++中),该应用程序将打印某些内容
感谢您的提示,如果父项设置为visible=false,MouseArea将被完全停用。再次将父项设置为visible=true后,MouseArea不会自动激活。必须将其设置为visible=true。