QML 行:如何从其他文件扩展 qml 容器(行或列)
QML Row: How to extend qml containers (Row or Column) from other file
看来应该是有解决办法的。
假设我有一个包含以下内容的 Test.qml 文件:
import QtQuick 2.0
Rectangle {
color: "green"
Row {
id: row
spacing: 10
anchors.fill: parent
Rectangle {
color: "red";
width: 100;
height: 100;
}
Rectangle {
color: "red";
width: 100;
height: 100;
}
Rectangle {
color: "red";
width: 100;
height: 100;
}
}
}
现在假设我们想在另一个文件中使用这个 Test.qml,例如 main.qml:
import QtQuick 2.15
import QtQuick.Window 2.15
Window {
id: window
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Test {
anchors.fill: parent;
// I want to be able to add new items (rects) to the row inside Test.qml
}
}
现在假设我们想将项目扩展到 Test.qml 中的行对象,但我们想从 main.qml 中添加。我们如何做到这一点?这可能吗?
(仅供参考:此功能的应用是开发一个占位符表单并将项目填写在其他项目中,这样我们就可以跳过重复代码。)
你可以create objects dynamically:
MyRow.qml:
Row {
id: row
spacing: 10
anchors.fill: parent
Rectangle {
color: "red";
width: 100;
height: 100;
}
}
main.qml:
MyRow{
id: myRow
Component.onCompleted: Qt.createQmlObject('import QtQuick 2.0; Rectangle {color: "green"; width: 100; height: 100}', myRow)
}
您可以在不动态创建对象的情况下执行此操作。您需要使用别名为行内容的 default property。默认 属性 意味着添加到您的对象的项目实际上将分配给该 属性。在 Test.qml 中添加:
Rectangle {
color: "green"
default property alias contents: row.data
Row {
id: row
...
}
}
现在您可以从 main.qml 添加其他项目,如下所示:
Test {
anchors.fill: parent;
// Automatically gets added to 'row'
Rectangle {
color: "blue"
width: 100
height: 100
}
}
看来应该是有解决办法的。 假设我有一个包含以下内容的 Test.qml 文件:
import QtQuick 2.0
Rectangle {
color: "green"
Row {
id: row
spacing: 10
anchors.fill: parent
Rectangle {
color: "red";
width: 100;
height: 100;
}
Rectangle {
color: "red";
width: 100;
height: 100;
}
Rectangle {
color: "red";
width: 100;
height: 100;
}
}
}
现在假设我们想在另一个文件中使用这个 Test.qml,例如 main.qml:
import QtQuick 2.15
import QtQuick.Window 2.15
Window {
id: window
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Test {
anchors.fill: parent;
// I want to be able to add new items (rects) to the row inside Test.qml
}
}
现在假设我们想将项目扩展到 Test.qml 中的行对象,但我们想从 main.qml 中添加。我们如何做到这一点?这可能吗?
(仅供参考:此功能的应用是开发一个占位符表单并将项目填写在其他项目中,这样我们就可以跳过重复代码。)
你可以create objects dynamically:
MyRow.qml:
Row {
id: row
spacing: 10
anchors.fill: parent
Rectangle {
color: "red";
width: 100;
height: 100;
}
}
main.qml:
MyRow{
id: myRow
Component.onCompleted: Qt.createQmlObject('import QtQuick 2.0; Rectangle {color: "green"; width: 100; height: 100}', myRow)
}
您可以在不动态创建对象的情况下执行此操作。您需要使用别名为行内容的 default property。默认 属性 意味着添加到您的对象的项目实际上将分配给该 属性。在 Test.qml 中添加:
Rectangle {
color: "green"
default property alias contents: row.data
Row {
id: row
...
}
}
现在您可以从 main.qml 添加其他项目,如下所示:
Test {
anchors.fill: parent;
// Automatically gets added to 'row'
Rectangle {
color: "blue"
width: 100
height: 100
}
}