警告 : このソリューションは内部オブジェクトの変更に依存しており、異なる Qt バージョンまたはプラットフォームで動作することは保証されていません
公開されていないオブジェクトのプロパティのみを変更したい場合でも、 (または/ ) のchildren
プロパティを使用してアクセスできます。Item
resources
data
呼び出す便利な関数Component.omCompleted
の 1 つは、 の階層をダンプする関数Item
です。実装例を次に示します。
function dumpHierarchy(item, level) {
level = level | 0;
for (var index = 0; index < item.children.length; ++index) {
var child = item.children[index];
print(Array(level*2 + 1).join(" ")+ index +": "+child);
dumpHierarchy(child, level+1);
}
}
Android と Qt 5.5 で出力されるものButton
:
0: QQuickLoader(0xab87c768)
0: QQuickLoader_QML_44(0xab7a84f0)
1: QQuickItem_QML_53(0xab8c8d60)
0: DrawableLoader_QMLTYPE_51(0xab8bb088)
0: StateDrawable_QMLTYPE_65(0xab949420)
0: DrawableLoader_QMLTYPE_51(0xab936ea0)
0: NinePatchDrawable_QMLTYPE_67(0xab955c90)
0: QQuickAndroid9Patch_QML_68(0xab913608)
1: QQuickLoader_QML_66(0xab924838)
1: QQuickRowLayout(0xab8b03a0)
0: QQuickImage(0xab8b0960)
1: LabelStyle_QMLTYPE_50(0xab8c1758)
1: QQuickMouseArea_QML_46(0xab887028)
ここでLabelStyle
、関心のある の階層位置を確認できます。すばやく汚いことをしたい場合は、Button
要素にこれを追加するだけです:
Component.onCompleted: children[0].children[1].children[1].children[1].font.pixelSize = 50
しかし、これは実際には保守可能ではありません。より受け入れられる解決策は、子階層をトラバースして、Button
変更するフォントを見つけることです。
私はfindFont
実用的なサンプル Application に関数を入れました:
import QtQuick 2.5
import QtQuick.Controls 1.4
ApplicationWindow {
id: app
visible: true
width: 640
height: 480
function findFont(object) {
if (object.font)
return object.font;
var font = null;
for (var index = 0; index < object.children.length && !font; ++index)
font = findFont(object.children[index]);
return font;
}
Column {
anchors.centerIn: parent
Button {
anchors.horizontalCenter: parent.horizontalCenter
text: "Button 1"
width: 300
height: 100
}
Button {
anchors.horizontalCenter: parent.horizontalCenter
text: "Button 2"
width: 300
height: 100
Component.onCompleted: {
findFont(this).pixelSize = 50;
// On Android and Qt 5.5, this is equivalent :
//children[0].children[1].children[1].children[1].font.pixelSize = 50;
}
}
}
}