Button qml按钮未启动,与MouseArea相同

Button qml按钮未启动,与MouseArea相同,button,qml,applicationwindow,mousearea,Button,Qml,Applicationwindow,Mousearea,我基于Qt5.9.3创建了一个新的QML项目。我用一个按钮和我自己的按钮(MyButton)设置了一个简单的应用程序窗口,但我从来没有为它们中的任何一个触发过onClicked()事件。“我的应用程序”窗口弹出,显示两个按钮。单击其中任何一个都不会在我的控制台输出中显示任何内容 我也在.pro文件中预编译我的qml源文件,如果这很重要的话。在启动时我在C++中修复了一些字体错误 使用一些字体,这样我就可以看到一些东西,除了没有 错误或警告。我花了几个小时只是想找个简单的 鼠标点击事件,没有运气

我基于Qt5.9.3创建了一个新的QML项目。我用一个按钮和我自己的按钮(MyButton)设置了一个简单的应用程序窗口,但我从来没有为它们中的任何一个触发过onClicked()事件。“我的应用程序”窗口弹出,显示两个按钮。单击其中任何一个都不会在我的控制台输出中显示任何内容

我也在.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代码根本不会工作。很抱歉这么晚才回来,这是非常繁忙的一周,很抱歉浪费了带宽。感谢您提供的大量调试建议,以供将来参考

我不知道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。