QML:没有调用 Rectangle 的 MouseArea 上的 onClicked 方法

Posted

技术标签:

【中文标题】QML:没有调用 Rectangle 的 MouseArea 上的 onClicked 方法【英文标题】:QML: onClicked method on MouseArea of Rectangle is not getting invoked 【发布时间】:2018-06-20 09:39:23 【问题描述】:

我是 Qt/QML 的新手。我正在向QML book 学习,我正在尝试向简单的 ListModel 添加/删除元素的示例。点击“添加项目”后,RectangleMouseArea中的onClicked方法没有被调用。委托组件中的 OnClicked 删除方法工作正常。

这里是代码

import QtQuick 2.9
import QtQuick.Window 2.3

Window 
    visible: true
    width: 480
    height: 300
    title: qsTr("Add / Remove")
    color: "blue"

    //ListModel
    ListModel
        id: lmodel
        ListElement number: 0
        ListElement number: 1
        ListElement number: 2
        ListElement number: 3
        ListElement number: 4
        ListElement number: 5
    

    // Add button
    Rectangle
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        anchors.margins: 20
        height: 40
        color: "#00ff00"
        border.color: Qt.lighter(color, 1.1)

        Text 
            anchors.centerIn: parent
            text: "Add Item"
        

        MouseArea
            anchors.fill: parent // Edit1
            onClicked:  // this Method is not getting called
                console.log(" add clicked");
                lmodel.append("number": ++parent.count);
            
        

        property int count: 5
    

    //GridView
    GridView
        anchors.fill: parent
        anchors.margins: 20
        clip: true
        model: lmodel

        cellHeight: 45
        cellWidth: 45
        delegate: del

    

    //delegate
    Component
        id: del
        Rectangle
            id: wrapper
            width: 40
            height: 40
            color: "yellow"
            Text 
                text: number
                anchors.centerIn: parent
            
            MouseArea
                anchors.fill: parent
                onClicked: 
                    console.log(" num clicked");
                    lmodel.remove(index);
                
            
        
    

【问题讨论】:

【参考方案1】:

您将MouseArea 锚定到ListModel

anchors.fill: lmodel

第二个问题:GridViewMouseArea 重叠。尝试禁用它(只是为了确保)

GridView
    enabled: false

【讨论】:

anchors.fill: 父级也不工作。我已经更新了代码。

以上是关于QML:没有调用 Rectangle 的 MouseArea 上的 onClicked 方法的主要内容,如果未能解决你的问题,请参考以下文章

qml 相互调用

QML中的图像圆角

为啥 QFontMetrics 提供的宽度与 Qml Rectangle/Text 显示的宽度不匹配

QML中MouseArea元素的介绍

QML - 控制Rectangle元素任何一侧的边框宽度和颜色

最大化矩形以适应应用程序窗口 QML