Qt Quick 3D - 3D粒子测试平台示例
// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause pragma ComponentBehavior: Bound import QtQuick import QtQuick.Controls import QtQuick3D.Particles3D Frame { id: root required property list<ParticleSystem3D> particleSystems readonly property bool loggingEnabled: AppSettings.showLoggingView property bool intervalInstant: false property real itemWidth: (width - loggingButton.width - intervalButton.width) / 7 width: parent.width height: tableContent.height + 30 Component.onCompleted: { for (const psystem of particleSystems) psystem.logging = AppSettings.showLoggingView; } // Background background: Rectangle { color: "#80000000" visible: root.loggingEnabled } Button { id: loggingButton anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right anchors.rightMargin: 10 opacity: root.loggingEnabled ? 1.0 : 0.4 icon.source: "qrc:/images/icon_logging.png" icon.width: 32 icon.height: 32 icon.color: "transparent" background: Rectangle { color: "transparent" } onClicked: { AppSettings.showLoggingView = !AppSettings.showLoggingView for (const psystem of root.particleSystems) { psystem.logging = AppSettings.showLoggingView; } } } Button { id: intervalButton anchors.verticalCenter: parent.verticalCenter anchors.right: loggingButton.left anchors.rightMargin: 0 visible: root.loggingEnabled opacity: root.intervalInstant ? 1.0 : 0.2 icon.source: "qrc:/images/icon_interval.png" icon.width: 32 icon.height: 32 icon.color: "transparent" background: Rectangle { color: "transparent" } onClicked: { root.intervalInstant = !root.intervalInstant; var interval = root.intervalInstant ? 0 : 1000; for (const psystem of root.particleSystems) psystem.loggingData.loggingInterval = interval; } } Component { id: systemComponent Row { id: systemItem required property ParticleSystem3D modelData Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: systemItem.modelData.seed } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: systemItem.modelData.loggingData.updates } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: systemItem.modelData.loggingData.particlesMax } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: systemItem.modelData.loggingData.particlesUsed } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: systemItem.modelData.loggingData.time.toFixed(4) } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: systemItem.modelData.loggingData.timeAverage.toFixed(4) } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: systemItem.modelData.loggingData.timeDeviation.toFixed(4) } } } Column { id: tableContent width: parent.width anchors.verticalCenter: parent.verticalCenter visible: root.loggingEnabled Row { Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: qsTr("SEED") } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: qsTr("UPDATES") } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: qsTr("P. MAX") } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: qsTr("P. USED") } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: qsTr("TIME") } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: qsTr("TIME AVG.") } Text { width: root.itemWidth horizontalAlignment: Text.AlignHCenter color: "#ffffff" font.pointSize: AppSettings.fontSizeSmall text: qsTr("TIME DEV.") } } Repeater { model: root.particleSystems delegate: systemComponent } } }