我创建了一个在主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的按钮文本?
答案 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,它仍然有用