qml按钮未触发,与MouseArea

时间:2017-12-04 22:27:26

标签: button qml applicationwindow mousearea

我基于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代码将无法正常工作。很抱歉这么晚才回到这里,这是一个非常忙碌的一周,很抱歉浪费带宽。感谢您提供了很好的调试建议以供将来参考!

1 个答案:

答案 0 :(得分:1)

我不知道QtQuick.Controls 2.0中Button的问题 - 它对我来说非常适合。

使用您自己的MyButton实现,这对我也不起作用。

原因是visible: false会停用MouseArea(及其所有子项) - 设置enabled: true不会改变它。
无论如何设置visible: false是不必要的,因为MouseArea没有任何东西可以呈现 - 效率不可见。

更改后,您应该收到警告:

  

Error: Insufficient arguments

当您调用需要参数(clicked)的MouseArea的信号MouseEvent时。要拨打自定义信号,请拨打button.clicked()而不是。

如果您仍然没有做任何事情,则需要采取进一步的调试步骤。

  1. 检查您是否可以使用console.log生成任何输出,例如将Component.onComplete: console.log("Output works")添加到您的某个对象。

  2. 点击Rectangle时更改MouseArea的颜色,检查输入是否确实损坏:color: (mouseArea.pressed ? 'red' : 'green')

  3. 如果eventFilter已注册,请在QGuiApplication(使用C ++)安装MouseEvent以打印内容。