diff options
author | Lena Biliaieva <lena.biliaieva@qt.io> | 2023-12-19 21:23:07 +0100 |
---|---|---|
committer | Lena Biliaieva <lena.biliaieva@qt.io> | 2023-12-20 12:06:33 +0100 |
commit | 40753e38b6b878dfa1a0027a314ac35c21da62c3 (patch) | |
tree | c80c3fe93833ce816743088b04f7a5699eb37321 | |
parent | 59e284470846ffc2eafd5d33ee80574c099f43e8 (diff) |
Review Water Pump Ex: Refactor code
Silenced qml warning.
Fixed unqualified access qmllint warning.
Fixed too long lines.
Fixes: QTBUG-120134
Pick-to: 6.7
Change-Id: I962c2655136ba30b3d1dfe0d8d07fce577bb176a
Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>
Reviewed-by: Rym Bouabid <rym.bouabid@qt.io>
9 files changed, 120 insertions, 33 deletions
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml b/examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml index d6622c9..20bec80 100644 --- a/examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml +++ b/examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml @@ -6,10 +6,12 @@ import OpcUaMachineBackend Rectangle { id: pump + width: 40 height: 40 radius: width / 2 color: uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping ? "#00BFFF" : "lightgrey" + Rectangle { antialiasing: true width: height / 4 @@ -17,6 +19,7 @@ Rectangle { anchors.centerIn: parent color: "grey" } + Rectangle { antialiasing: true width: pump.width * 0.75 @@ -24,9 +27,11 @@ Rectangle { anchors.centerIn: parent color: "grey" } + Connections { target: uaBackend - onPercentFilledTank2Changed: { + + function onPercentFilledTank2Changed(value) { if (uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping) rotation += 15 } diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml b/examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml index a779459..8ec376b 100644 --- a/examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml +++ b/examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml @@ -11,6 +11,7 @@ RowLayout { Layout.fillWidth: true text: "opc.tcp://127.0.0.1:43344" } + ComboBox { id: backendSelector model: uaBackend.backends @@ -26,6 +27,7 @@ RowLayout { uaBackend.connectToEndpoint(uaUrl.text, backendSelector.currentIndex) } } + Button { text: "Reset simulation" enabled: uaBackend.connected diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml b/examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml index 7c3c55e..db92188 100644 --- a/examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml +++ b/examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml @@ -4,14 +4,18 @@ import QtQuick Rectangle { + id: root + property real percentFilled: 0 + color: "lightgrey" width: parent.width height: parent.height + Rectangle { - y: parent.height - percentFilled * (parent.height / 100) + y: parent.height - root.percentFilled * (parent.height / 100) width: parent.width - height: percentFilled * (parent.height / 100) + height: root.percentFilled * (parent.height / 100) color: "#00BFFF" } } diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml b/examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml index 29de964..b98c05c 100644 --- a/examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml +++ b/examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml @@ -11,21 +11,27 @@ Item { ColumnLayout { anchors.fill: parent + RowLayout { Button { id: startButton text: "Start" - enabled: uaBackend.connected && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle && - uaBackend.percentFilledTank1 > 0 && uaBackend.percentFilledTank2 < uaBackend.tank2TargetPercent + enabled: uaBackend.connected + && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle + && uaBackend.percentFilledTank1 > 0 + && uaBackend.percentFilledTank2 < uaBackend.tank2TargetPercent onClicked: uaBackend.startPump() } + Button { id: stopButton text: "Stop" - enabled: uaBackend.connected && uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping + enabled: uaBackend.connected + && uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping onClicked: uaBackend.stopPump() } } + Tank { id: tank1 Layout.fillHeight: true diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml b/examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml index 99afa54..4ee2a74 100644 --- a/examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml +++ b/examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml @@ -9,15 +9,19 @@ import OpcUaMachineBackend Item { ColumnLayout { anchors.fill: parent + Layout.fillHeight: true + Button { id: flushButton text: "Flush" - enabled: uaBackend.connected && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle && uaBackend.percentFilledTank2 > uaBackend.tank2TargetPercent + enabled: uaBackend.connected + && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle + && uaBackend.percentFilledTank2 > uaBackend.tank2TargetPercent onClicked: { uaBackend.flushTank2() } } - Layout.fillHeight: true + Tank { id: tank2 Layout.fillHeight: true diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml b/examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml index f75dc24..e65b843 100644 --- a/examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml +++ b/examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml @@ -8,22 +8,27 @@ import OpcUaMachineBackend RowLayout { opacity: uaBackend.connected ? 1.0 : 0.25 + Tank1Unit { id: tank1unit Layout.fillHeight: true Layout.fillWidth: true } + Pump {} + Tank2Unit { Layout.fillHeight: true Layout.fillWidth: true } + Slider { id: setpointSlider Layout.fillHeight: false Layout.preferredHeight: tank1unit.tankHeight Layout.alignment: Qt.AlignBottom - enabled: uaBackend.connected && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle + enabled: uaBackend.connected + && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle from: 0 to: 100 value: uaBackend.tank2TargetPercent @@ -34,5 +39,6 @@ RowLayout { uaBackend.machineWriteTank2TargetPercent(value); } } + ValueDisplay {} } diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml b/examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml index 63f5309..9414fc8 100644 --- a/examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml +++ b/examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml @@ -16,8 +16,11 @@ ColumnLayout { } Text { font.pointSize: 10 - text: "<b>State:</b> " + (uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle ? - "Idle" : (uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping ? "Pumping" : "Flushing")) + text: "<b>State:</b> " + + (uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle + ? "Idle" + : (uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping ? "Pumping" + : "Flushing")) } Text { font.pointSize: 10 diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/main.qml b/examples/opcua/waterpump/waterpump-qmlcpp/main.qml index fd87c69..caa947e 100644 --- a/examples/opcua/waterpump/waterpump-qmlcpp/main.qml +++ b/examples/opcua/waterpump/waterpump-qmlcpp/main.qml @@ -17,10 +17,13 @@ Window { anchors.margins: 10 anchors.fill: parent spacing: 45 + ServerControl {} + TankSimulation { Layout.fillHeight: true } + Text { id: messageText font.pointSize: 10 diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp b/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp index fed92f6..dceb13c 100644 --- a/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp +++ b/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp @@ -50,34 +50,79 @@ void OpcUaMachineBackend::clientStateHandler(QOpcUaClient::ClientState state) m_machineDesignationNode.reset(m_client->node(u"ns=2;s=Machine.Designation"_s)); // Connect signal handlers for subscribed values - QObject::connect(m_machineStateNode.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::machineStateUpdated); - QObject::connect(m_percentFilledTank1Node.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::percentFilledTank1Updated); - QObject::connect(m_percentFilledTank2Node.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::percentFilledTank2Updated); - QObject::connect(m_tank2TargetPercentNode.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::tank2TargetPercentUpdated); - QObject::connect(m_tank2ValveStateNode.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::tank2ValveStateUpdated); + QObject::connect(m_machineStateNode.data(), + &QOpcUaNode::dataChangeOccurred, + this, + &OpcUaMachineBackend::machineStateUpdated); + QObject::connect(m_percentFilledTank1Node.data(), + &QOpcUaNode::dataChangeOccurred, + this, + &OpcUaMachineBackend::percentFilledTank1Updated); + QObject::connect(m_percentFilledTank2Node.data(), + &QOpcUaNode::dataChangeOccurred, + this, + &OpcUaMachineBackend::percentFilledTank2Updated); + QObject::connect(m_tank2TargetPercentNode.data(), + &QOpcUaNode::dataChangeOccurred, + this, + &OpcUaMachineBackend::tank2TargetPercentUpdated); + QObject::connect(m_tank2ValveStateNode.data(), + &QOpcUaNode::dataChangeOccurred, + this, + &OpcUaMachineBackend::tank2ValveStateUpdated); // Subscribe to data changes - m_machineStateNode->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100)); - m_percentFilledTank1Node->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100)); - m_percentFilledTank2Node->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100)); - m_tank2TargetPercentNode->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100)); - m_tank2ValveStateNode->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100)); + m_machineStateNode->enableMonitoring( + QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100)); + m_percentFilledTank1Node->enableMonitoring( + QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100)); + m_percentFilledTank2Node->enableMonitoring( + QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100)); + m_tank2TargetPercentNode->enableMonitoring( + QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100)); + m_tank2ValveStateNode->enableMonitoring( + QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100)); // Connect the handler for async reading - QObject::connect(m_machineDesignationNode.data(), &QOpcUaNode::attributeRead, this, &OpcUaMachineBackend::machineDesignationRead); + QObject::connect(m_machineDesignationNode.data(), + &QOpcUaNode::attributeRead, + this, + &OpcUaMachineBackend::machineDesignationRead); + // Request the value attribute of the machine designation node m_machineDesignationNode->readAttributes(QOpcUa::NodeAttribute::Value); // Add handlers for write and call results - QObject::connect(m_tank2TargetPercentNode.data(), &QOpcUaNode::attributeWritten, this, &OpcUaMachineBackend::setpointWritten); - QObject::connect(m_machineNode.data(), &QOpcUaNode::methodCallFinished, this, &OpcUaMachineBackend::handleMethodResult); + QObject::connect(m_tank2TargetPercentNode.data(), + &QOpcUaNode::attributeWritten, + this, + &OpcUaMachineBackend::setpointWritten); + QObject::connect(m_machineNode.data(), + &QOpcUaNode::methodCallFinished, + this, + &OpcUaMachineBackend::handleMethodResult); // Add handlers for enableMonitoring results - QObject::connect(m_machineStateNode.data(), &QOpcUaNode::enableMonitoringFinished, this, &OpcUaMachineBackend::enableMonitoringFinished); - QObject::connect(m_percentFilledTank1Node.data(), &QOpcUaNode::enableMonitoringFinished, this, &OpcUaMachineBackend::enableMonitoringFinished); - QObject::connect(m_percentFilledTank2Node.data(), &QOpcUaNode::enableMonitoringFinished, this, &OpcUaMachineBackend::enableMonitoringFinished); - QObject::connect(m_tank2TargetPercentNode.data(), &QOpcUaNode::enableMonitoringFinished, this, &OpcUaMachineBackend::enableMonitoringFinished); - QObject::connect(m_tank2ValveStateNode.data(), &QOpcUaNode::enableMonitoringFinished, this, &OpcUaMachineBackend::enableMonitoringFinished); + QObject::connect(m_machineStateNode.data(), + &QOpcUaNode::enableMonitoringFinished, + this, + &OpcUaMachineBackend::enableMonitoringFinished); + QObject::connect(m_percentFilledTank1Node.data(), + &QOpcUaNode::enableMonitoringFinished, + this, + &OpcUaMachineBackend::enableMonitoringFinished); + QObject::connect(m_percentFilledTank2Node.data(), + &QOpcUaNode::enableMonitoringFinished, + this, + &OpcUaMachineBackend::enableMonitoringFinished); + QObject::connect(m_tank2TargetPercentNode.data(), + &QOpcUaNode::enableMonitoringFinished, + this, + &OpcUaMachineBackend::enableMonitoringFinished); + QObject::connect(m_tank2ValveStateNode.data(), + &QOpcUaNode::enableMonitoringFinished, + this, + &OpcUaMachineBackend::enableMonitoringFinished); } if (state == QOpcUaClient::ClientState::Connecting) @@ -146,7 +191,9 @@ void OpcUaMachineBackend::setpointWritten(QOpcUa::NodeAttribute attr, QOpcUa::Ua setMessage(u"Failed to set setpoint"_s); } -void OpcUaMachineBackend::handleMethodResult(QString methodNodeId, const QVariant &result, QOpcUa::UaStatusCode statusCode) +void OpcUaMachineBackend::handleMethodResult(QString methodNodeId, + const QVariant &result, + QOpcUa::UaStatusCode statusCode) { Q_UNUSED(result); @@ -173,7 +220,8 @@ void OpcUaMachineBackend::handleMethodResult(QString methodNodeId, const QVarian } } -void OpcUaMachineBackend::enableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode status) +void OpcUaMachineBackend::enableMonitoringFinished(QOpcUa::NodeAttribute attr, + QOpcUa::UaStatusCode status) { Q_UNUSED(attr); if (!sender()) @@ -296,8 +344,14 @@ void OpcUaMachineBackend::connectToEndpoint(const QString &url, qint32 index) if (!m_client || (m_client && m_client->backend() != m_backends.at(index))) { m_client.reset(provider.createClient(m_backends.at(index))); if (m_client) { - QObject::connect(m_client.data(), &QOpcUaClient::endpointsRequestFinished, this, &OpcUaMachineBackend::requestEndpointsFinished); - QObject::connect(m_client.data(), &QOpcUaClient::stateChanged, this, &OpcUaMachineBackend::clientStateHandler); + QObject::connect(m_client.data(), + &QOpcUaClient::endpointsRequestFinished, + this, + &OpcUaMachineBackend::requestEndpointsFinished); + QObject::connect(m_client.data(), + &QOpcUaClient::stateChanged, + this, + &OpcUaMachineBackend::clientStateHandler); } } |