如何在不使用id的情况下从ButtonStyle获取父按钮?

时间:2014-08-14 11:21:18

标签: qt qml

我创建了一个在主qml文件中多次使用的组件(SidebarMenuButton)。该按钮具有应由其所有“实例”继承的样式。这是SidebarMenuButton.qml:

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: parent.text // undefined here
            color: 'white'
            font.family: 'Helvetica'
            font.pixelSize: 12
            font.bold: true
            verticalAlignment: Text.AlignVCenter
            horizontalAlignment: Text.AlignHCenter
        }
    }
}

我的主要qml文件的一部分:

import QtQuick 2.3
import QtQuick.Window 2.1
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2    

Window {
    id: main
    title: 'Messenger'
    width: 1024
    height: 768
    minimumWidth: 800
    minimumHeight: 600

    RowLayout {
        id: layout
        anchors.fill: parent
        spacing: 0

        Rectangle {
            id: sidebar
            color: '#3C3E55'
            Layout.fillHeight: true
            Layout.preferredWidth: 200

            ButtonCompanyName {
                id: buttonCompanyName
            }

            ButtonNewMessage {
                id: buttonNewMessage
            }

            SidebarMenuButton {
                id: buttonInbox
                text: 'Inbox (1)'
                anchors.top: buttonNewMessage.bottom
            }

            SidebarMenuButton {
                id: buttonSentMessages
                text: 'Sent messages'
                anchors.top: buttonInbox.bottom
            }

            SidebarMenuButton {
                id: buttonStarred
                text: 'Starred'
                anchors.top: buttonSentMessages.bottom
            }
        }

我评论了错误的一行。父级没有引用按钮,所以所有按钮中的文本都是空的。我需要从那里访问父按钮并获取它的文本属性。该组件没有id,因为它被多次使用,并且在主qml文件中分配了id。所以问题是:如何获得没有id的按钮文本?

2 个答案:

答案 0 :(得分:2)

您可以通过两种方式设置文本。

1)您要应用样式的Button在control类中以ButtonStyle属性的形式提供。您可以将文本设置为text:control.text

Reference:control property(ButtonStyle)

2)您可以为Button类型中的SidebarMenuButton提供ID并访问其text媒体资源。

Button
{
    id:button
    .
    .
    .
    text: button.text   

} 

答案 1 :(得分:1)

您可以在组件文件中分配一个id,该container与您在其他位置实例化组件时使用的ID不会冲突。我对大多数QML组件的id使用相同的值:import QtQuick 2.3 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.2 Button { id: container style: ButtonStyle { background: Rectangle { color: 'transparent' } label: Text { text: container.text } } } ,以便我可以轻松地从项目的根目录引用属性。

{{1}}

然后当你在另一个文件中实例化这个组件时,你可以设置你想要的任何一个id,它仍然有用