我可以在main.qml中扩展组件的MouseArea吗?

时间:2014-08-19 05:24:14

标签: qt qml qt5

如果我在SidebarMenuButton.qml组件中声明一个MouseArea,如下所示:

import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2

Button {
    width: buttonNewMessage.width
    height: buttonNewMessage.height
    anchors {
        horizontalCenter: parent.horizontalCenter
        topMargin: 5
    }
    style: ButtonStyle {
        background: Rectangle {
            color: 'transparent'
        }
        label: Text {
            text: control.text
            color: 'white'
            font.family: 'Helvetica'
            font.pixelSize: 12
            font.bold: true
            verticalAlignment: Text.AlignVCenter
            horizontalAlignment: Text.AlignLeft
        }
    }

    MouseArea {
        anchors.fill: parent
        cursorShape: "PointingHandCursor"
    }
}

并在main.qml中使用它,如下所示:

    SidebarMenuButton {
        id: buttonInbox
        text: 'Inbox'
        anchors.top: buttonNewMessage.bottom

        MouseArea {
            anchors.fill: parent
            onClicked: {
                newMessageContainer.visible = false;
                inboxContainer.visible = true;
            }
        }
    }

然后main.qml中的按钮覆盖SidebarMenuButton.qml的MouseArea 我可以扩展那个MouseArea而不是覆盖它吗?

1 个答案:

答案 0 :(得分:2)

问题是:"为什么要将另一个MouseArea放在Button中已存在的那个上,而不是重新使用它?更重要的是,为什么要将MouseArea放在Button组件中,该组件已经拥有自己的组件"。

如果您需要能够在main.qml中使用onClicked: { ... },则只需转发信号,因此只需在自定义组件中声明signal clicked ();,然后从内部MouseArea触发它,所以你能够从外面捕获它。

但是我仍然在想你的代码中的某些内容是完全错误的......