Преглед изворни кода

Merge branch 'master' of http://jiecheng2024.tpddns.cn:3000/liyuezong/SmartPDCode

guohui пре 1 година
родитељ
комит
cb0ca87744

+ 24 - 0
Qt/Qt_Test_242/.qmake.stash

@@ -0,0 +1,24 @@
+QMAKE_CXX.QT_COMPILER_STDCXX = 201402L
+QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 7
+QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 3
+QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 1
+QMAKE_CXX.COMPILER_MACROS = \
+    QT_COMPILER_STDCXX \
+    QMAKE_GCC_MAJOR_VERSION \
+    QMAKE_GCC_MINOR_VERSION \
+    QMAKE_GCC_PATCH_VERSION
+QMAKE_CXX.INCDIRS = \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/opt/ext-toolchain/arm-linux-gnueabi/include/c++/7.3.1 \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/opt/ext-toolchain/arm-linux-gnueabi/include/c++/7.3.1/arm-linux-gnueabi \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/opt/ext-toolchain/arm-linux-gnueabi/include/c++/7.3.1/backward \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/opt/ext-toolchain/lib/gcc/arm-linux-gnueabi/7.3.1/include \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/opt/ext-toolchain/lib/gcc/arm-linux-gnueabi/7.3.1/include-fixed \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/opt/ext-toolchain/arm-linux-gnueabi/include \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/arm-buildroot-linux-gnueabi/sysroot/usr/include
+QMAKE_CXX.LIBDIRS = \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/opt/ext-toolchain/lib/gcc/arm-linux-gnueabi/7.3.1 \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/opt/ext-toolchain/lib/gcc/arm-linux-gnueabi \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/opt/ext-toolchain/lib/gcc \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/opt/ext-toolchain/arm-linux-gnueabi/lib \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/arm-buildroot-linux-gnueabi/sysroot/lib \
+    /home/tronlong/T113/T113-i_v1.0/out/t113_i/tlt113-evm-emmc/longan/buildroot/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib

Разлика између датотеке није приказан због своје велике величине
+ 2541 - 0
Qt/Qt_Test_242/Makefile


BIN
Qt/Qt_Test_242/Qt_Test


+ 51 - 0
Qt/Qt_Test_242/Qt_Test.pro

@@ -0,0 +1,51 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2024-04-12T21:54:14
+#
+#-------------------------------------------------
+
+QT       += core gui network sql
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = Qt_Test
+TEMPLATE = app
+QT_CONFIG += rgb16
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which has been marked as deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+
+SOURCES += \
+        main.cpp \
+    pdu_ctrl.cpp \
+        widget.cpp \
+    volviewform.cpp \
+    udphelper.cpp \
+    dataupdatethread.cpp \
+    buttonclickthread.cpp
+
+HEADERS += \
+    pdu_ctrl.h \
+        widget.h \
+    volviewform.h \
+    udphelper.h \
+    dataupdatethread.h \
+    buttonclickthread.h
+
+FORMS += \
+    volviewform.ui \
+    widget.ui
+
+target.path = /root/web_temp
+INSTALLS += target
+
+LIBS += -lrt

+ 362 - 0
Qt/Qt_Test_242/Qt_Test.pro.user

@@ -0,0 +1,362 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by QtCreator 4.5.2, 2024-11-09T13:31:03. -->
+<qtcreator>
+ <data>
+  <variable>EnvironmentId</variable>
+  <value type="QByteArray">{3bdf3ea4-d0d2-4897-8224-daaa02f7bea3}</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.ActiveTarget</variable>
+  <value type="int">0</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.EditorSettings</variable>
+  <valuemap type="QVariantMap">
+   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+   <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
+   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+    <value type="QString" key="language">Cpp</value>
+    <valuemap type="QVariantMap" key="value">
+     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+    </valuemap>
+   </valuemap>
+   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
+    <value type="QString" key="language">QmlJS</value>
+    <valuemap type="QVariantMap" key="value">
+     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
+    </valuemap>
+   </valuemap>
+   <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
+   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+   <value type="int" key="EditorConfiguration.IndentSize">4</value>
+   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
+   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
+   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
+   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+   <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
+   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+   <value type="int" key="EditorConfiguration.TabSize">8</value>
+   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.PluginSettings</variable>
+  <valuemap type="QVariantMap"/>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Target.0</variable>
+  <valuemap type="QVariantMap">
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">T113</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">T113</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{53055201-e8b9-4b93-a88f-c8dd2f1ab176}</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/tronlong/Desktop/qt/Qt_Test</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+       <value type="QString">-w</value>
+       <value type="QString">-r</value>
+      </valuelist>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+       <value type="QString">-w</value>
+       <value type="QString">-r</value>
+      </valuelist>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+    <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+   </valuemap>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/tronlong/Desktop/qt/Qt_Test</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+       <value type="QString">-w</value>
+       <value type="QString">-r</value>
+      </valuelist>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+       <value type="QString">-w</value>
+       <value type="QString">-r</value>
+      </valuelist>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+    <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+   </valuemap>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/tronlong/build-Qt_Test-T113-Profile</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+       <value type="QString">-w</value>
+       <value type="QString">-r</value>
+      </valuelist>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+       <value type="QString">-w</value>
+       <value type="QString">-r</value>
+      </valuelist>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+    <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Check for free disk space</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.CheckForFreeDiskSpaceStep</value>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedTimes"/>
+      <value type="QString" key="RemoteLinux.CheckForFreeDiskSpaceStep.PathToCheck">/</value>
+      <value type="qulonglong" key="RemoteLinux.CheckForFreeDiskSpaceStep.RequiredSpace">5242880</value>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Upload files via SFTP</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.DirectUploadStep</value>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedTimes"/>
+      <value type="bool" key="RemoteLinux.GenericDirectUploadStep.IgnoreMissingFiles">false</value>
+      <value type="bool" key="RemoteLinux.GenericDirectUploadStep.Incremental">true</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy to Remote Linux Host</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">DeployToGenericLinux</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+    <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+    <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+    <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+    <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+     <value type="int">0</value>
+     <value type="int">1</value>
+     <value type="int">2</value>
+     <value type="int">3</value>
+     <value type="int">4</value>
+     <value type="int">5</value>
+     <value type="int">6</value>
+     <value type="int">7</value>
+     <value type="int">8</value>
+     <value type="int">9</value>
+     <value type="int">10</value>
+     <value type="int">11</value>
+     <value type="int">12</value>
+     <value type="int">13</value>
+     <value type="int">14</value>
+    </valuelist>
+    <value type="int" key="PE.EnvironmentAspect.Base">1</value>
+    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt_Test (on Remote Device)</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinuxRunConfiguration:Qt_Test</value>
+    <value type="QString" key="Qt4ProjectManager.MaemoRunConfiguration.Arguments"></value>
+    <value type="QString" key="Qt4ProjectManager.MaemoRunConfiguration.TargetName">Qt_Test</value>
+    <value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
+    <value type="QString" key="RemoteLinux.RunConfig.AlternateRemoteExecutable"></value>
+    <value type="bool" key="RemoteLinux.RunConfig.UseAlternateRemoteExecutable">false</value>
+    <value type="QString" key="RemoteLinux.RunConfig.WorkingDirectory"></value>
+    <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.TargetCount</variable>
+  <value type="int">1</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+  <value type="int">18</value>
+ </data>
+ <data>
+  <variable>Version</variable>
+  <value type="int">18</value>
+ </data>
+</qtcreator>

+ 215 - 0
Qt/Qt_Test_242/buttonclickthread.cpp

@@ -0,0 +1,215 @@
+#include "buttonclickthread.h"
+#include <unistd.h>
+#include <linux/input.h>
+#include "pdu_ctrl.h"
+typedef enum { KEY_CODE_NONE = 0, KEY_CODE_USER0, KEY_CODE_USER1 } KeyCode;
+ButtonClickThread::ButtonClickThread(QObject *parent)
+    :QThread(parent)
+{
+    isRunning=true;
+
+    nButtonSave[0]=0;nButtonSave[1]=0;nButtonSave[2]=0;nButtonSave[3]=0;nButtonSave[4]=0;
+    bButtonSend[0]=0;bButtonSend[1]=0;bButtonSend[2]=0;
+    nButtonTime[0]=0;nButtonTime[1]=0;nButtonTime[2]=0;
+    qDebug()<<"bButtonSend"<<bButtonSend[0]<<bButtonSend[1]<<bButtonSend[2];
+    qDebug()<<"nButtonTime"<<nButtonTime[0]<<nButtonTime[1]<<nButtonTime[2];
+    pTimeAngle=QTime::currentTime();
+}
+
+ButtonClickThread::~ButtonClickThread()
+{
+    isRunning=false;
+}
+
+void ButtonClickThread::InitConnect()
+{
+   bool ret=connect(this,SIGNAL(signal_ButtonClick(int)),pdu_Ctrl::instance(),SLOT(slot_ClickBtn(int)));
+   qDebug()<<"slot_ClickBtn ="<<ret;
+   ret= connect(this,SIGNAL(signal_ButtonDoubleClick(int)),pdu_Ctrl::instance(),SLOT(slot_DClickBtn(int)));
+   qDebug()<<"slot_DClickBtn ="<<ret;
+   ret= connect(this,SIGNAL(signal_ButtonLongPressed(int)),pdu_Ctrl::instance(),SLOT(slot_LClickBtn(int)));
+   qDebug()<<"slot_LClickBtn ="<<ret;
+   ret= connect(this,SIGNAL(signal_ButtonClear(int)),pdu_Ctrl::instance(),SLOT(slot_BtnClear(int)));
+   qDebug()<<"slot_BtnClear ="<<ret;
+   ret= connect(this,SIGNAL(signal_AngleSet(int)),pdu_Ctrl::instance(),SLOT(slot_setAngel(int)));
+   qDebug()<<"slot_setAngel ="<<ret;
+}
+
+void ButtonClickThread::run()
+{
+    qDebug() <<"Start BtnThread";
+    while (isRunning) {
+        checkBtnStatus(GPIO_KEY1);
+        checkBtnStatus(GPIO_KEY2);
+        checkBtnStatus(GPIO_KEY3);
+        checkBtnStatus(GPIO_KEY4);
+#ifdef hightSmartPDU
+        checkBtnStatus(GPIO_X);
+        checkBtnStatus(GPIO_Y);
+#endif
+        if(!nButtonSave[1]&&!nButtonSave[2]&&!nButtonSave[0])
+        {
+            msleep(2000);
+        }else
+        {
+            //qDebug()<<"SaveDAta"<<nButtonSave[1]<<nButtonSave[2]<<nButtonSave[3];
+            for(int i=0;i<5;i++)
+            {
+               ButtonDownTime(i,nButtonSave[i]);
+            }
+        }
+        msleep(100);
+    }
+}
+
+
+void ButtonClickThread::checkBtnStatus(int KeyID)
+{
+    QString gpioPath=QString("/sys/class/gpio/gpio%1/value").arg(KeyID);
+    QFile file(gpioPath);
+    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+        QTextStream in(&file);
+        QString value = in.readLine();
+        switch (KeyID) {
+        case GPIO_KEY1:
+            nButtonSave[0]=value.toInt();
+            break;
+        case GPIO_KEY2:
+            nButtonSave[1]=value.toInt();
+            break;
+        case GPIO_KEY3:
+            nButtonSave[2]=value.toInt();
+            break;
+    #ifdef hightSmartPDU
+        case GPIO_X:
+            nButtonSave[3]=value.toInt();
+            break;
+        case GPIO_Y:
+            nButtonSave[4]=value.toInt();
+            break;
+    #endif
+        default:
+            break;
+        }
+        //ButtonDownTime(KeyID,value.toInt());
+        file.close();
+    }
+}
+
+void ButtonClickThread::ButtonDownTime(int KeyID,int nValue)
+{
+    switch (KeyID) {
+    case 0:
+        TimeSet(GPIO_KEY1,0,nValue);
+        break;
+    case 1:
+        TimeSet(GPIO_KEY2,1,nValue);
+        break;
+    case 2:
+        TimeSet(GPIO_KEY3,2,nValue);
+        break;
+#ifdef hightSmartPDU
+    case 3:
+        SaveSataus(nValue,m_nY);
+        break;
+    case 4:
+        SaveSataus(m_nX,nValue);
+        break;
+#endif
+    default:
+        break;
+    }
+}
+
+void ButtonClickThread::TimeSet(int KeyID,int nIndex, int nValue)
+{
+    //qDebug()<<"TimeSetStart:Key"<<KeyID<<"_Time:"<<nButtonTime[nIndex]<<"Send:"<<bButtonSend[nIndex];
+    int* pTime=nButtonTime;
+    //负数记录松开时长正数记录按下时长
+    if(nValue==0)
+    {//按下
+        if(bButtonSend[nIndex])
+        {//已发送不响应
+            pTime[nIndex]=1;
+            bButtonSend[nIndex]=true;
+        }else
+        {
+            if(pTime[nIndex]<0)
+            {//当前已松开此时判断为双击
+                pTime[nIndex]=1;
+                emit signal_ButtonDoubleClick(KeyID);
+                qDebug()<<"bButtonSend"<<bButtonSend[0]<<bButtonSend[1]<<bButtonSend[2];
+                qDebug()<<"nButtonTime"<<nButtonTime[0]<<nButtonTime[1]<<nButtonTime[2];
+                bButtonSend[nIndex]=true;
+            }else
+            {
+                pTime[nIndex]+=1;
+                if(pTime[nIndex]>20)
+                {
+                    //超过3秒判断为长按
+                    emit signal_ButtonLongPressed(KeyID);
+                    qDebug()<<"bButtonSend"<<bButtonSend[0]<<bButtonSend[1]<<bButtonSend[2];
+                    qDebug()<<"nButtonTime"<<nButtonTime[0]<<nButtonTime[1]<<nButtonTime[2];
+                    bButtonSend[nIndex]=true;
+                }
+            }
+        }
+    }else
+    {//松开
+        if(bButtonSend[nIndex])
+        {   //已发送过了松开重置
+            pTime[nIndex]=0;
+            bButtonSend[nIndex]=false;
+            emit signal_ButtonClear(KeyID);
+            qDebug()<<"bButtonSend"<<bButtonSend[0]<<bButtonSend[1]<<bButtonSend[2];
+            qDebug()<<"nButtonTime"<<nButtonTime[0]<<nButtonTime[1]<<nButtonTime[2];
+        }
+        else
+        {
+            if(pTime[nIndex]>0)
+            {//当前已点击此时松开可能为双击
+                pTime[nIndex]=-1;
+            }else if(pTime[nIndex]<-2)
+            {//超过400毫秒未点击则判断无双击此时为单单击
+                pTime[nIndex]=0;
+                emit signal_ButtonClick(KeyID);
+                qDebug()<<"bButtonSend"<<bButtonSend[0]<<bButtonSend[1]<<bButtonSend[2];
+                qDebug()<<"nButtonTime"<<nButtonTime[0]<<nButtonTime[1]<<nButtonTime[2];
+                bButtonSend[nIndex]=true;
+            }else if(pTime[nIndex]<0)
+            {//松开计时
+                pTime[nIndex]-=1;
+
+            }else
+            {
+                pTime[nIndex]=0;
+            }
+        }
+
+    }
+    //qDebug()<<"TimeSetEnd:Key"<<KeyID<<"_Time:"<<nButtonTime[nIndex]<<"Send:"<<bButtonSend[nIndex];
+}
+
+void ButtonClickThread::SaveSataus(int nX, int nY)
+{
+    int nAngle=0;
+    m_nX=nX;
+    m_nY=nY;
+    if(m_nX&&m_nY)nAngle=90;
+    if(m_nX&&!m_nY)nAngle=0;
+    if(!m_nX&&m_nY)nAngle=270;
+    if(!m_nX&&!m_nY)nAngle=180;
+    if(m_nSaveAngle!=nAngle)
+    {
+        QTime pNew=QTime::currentTime();
+        int nSecTo=pTimeAngle.secsTo(pNew);
+        if(nSecTo>=2)
+        {
+            m_nSaveAngle=nAngle;
+            emit signal_AngleSet(m_nSaveAngle);
+            pTimeAngle=pNew;
+        }
+        qDebug()<<"Check Angle:"<<nAngle<<" X="<<m_nX<<" Y="<<m_nY<<"SecTo:"<<nSecTo;
+    }
+
+}

+ 45 - 0
Qt/Qt_Test_242/buttonclickthread.h

@@ -0,0 +1,45 @@
+#ifndef BUTTONCLICKTHREAD_H
+#define BUTTONCLICKTHREAD_H
+//#define hightSmartPDU
+#define rs485KEY
+#include <QObject>
+#include <QThread>
+#include <QDebug>
+#include <QTime>
+class ButtonClickThread : public QThread
+{
+    Q_OBJECT
+public:
+    ButtonClickThread(QObject *parent);
+    ~ButtonClickThread();
+    void InitConnect();
+
+    void run();
+
+    void checkBtnStatus(int KeyID);
+
+    void ButtonDownTime(int KeyID,int nValue);
+
+    void TimeSet(int KeyID,int Index,int nValue);
+
+    void SaveSataus(int nX,int nY);
+signals:
+    void signal_ButtonClear(int KeyID);
+    void signal_ButtonClick(int KeyID);
+    void signal_ButtonLongPressed(int KeyID);
+    void signal_ButtonDoubleClick(int KeyID);
+    void signal_AngleSet(int nAngle);
+public:
+    bool isRunning;
+    int nButtonSave[5];
+    int nButtonTime[3];
+    int bButtonSend[3];
+
+    int m_nX=1;
+    int m_nY=1;
+    int m_nSaveAngle=0;
+    QTime pTimeAngle;
+    //11 0,01 90,10 180,00 270
+};
+
+#endif // BUTTONCLICKTHREAD_H

+ 300 - 0
Qt/Qt_Test_242/dataupdatethread.cpp

@@ -0,0 +1,300 @@
+#include "dataupdatethread.h"
+#include <QSqlQuery>
+#include <QSqlError>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>           /* For O_* constants */
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>        /* For shm_open, mmap, ftruncate, etc */
+#include <sys/stat.h>        /* For mode constants */
+#include <errno.h>
+#include <unistd.h>
+#include <QtSql>
+DataUpdateThread::DataUpdateThread(QObject *parent)
+    :QThread(parent)
+{
+    isRunStats=true;
+    nMaxCh=0;
+    nReadType=0;
+    m_shmData=0;
+    bTacStatus=0;
+}
+
+DataUpdateThread::~DataUpdateThread()
+{
+    isRunStats=false;
+    m_db.close();
+}
+
+void DataUpdateThread::InitSql()
+{
+    m_db=QSqlDatabase::addDatabase("QSQLITE");
+    m_db.setDatabaseName(strSqliteAddress);
+    qDebug()<<strSqliteAddress;
+    if (m_db.open())
+    {
+        qDebug()<<"SQL Open Success";
+        isDBOpen=true;
+    }else
+    {
+        qDebug()<<"SQL Open Error";
+        isDBOpen=false;
+    }
+    if(isDBOpen)
+    {
+        ReadMaxCh();
+    }
+    nReadType=0;
+}
+
+void DataUpdateThread::run()
+{
+    qDebug() <<"Start SQLThread";
+    while (isRunStats)
+    {
+
+        if(pwidget)
+        {
+            if(nReadType==0)
+            {
+                int nMode=pwidget->getShowModeIndex();
+                int nPage=pwidget->getShowPagIndex();
+                if(nMode==0&&nPage!=0)
+                {
+                    int nSubPag=pwidget->getShowSubIndex();
+                    ReadSqlData(nSubPag);
+                    pwidget->SetV(strV);
+                    pwidget->SetA(strA);
+                    pwidget->SetW(strW);
+                    pwidget->SetF(strF);
+                    pwidget->SetSUM(strS);
+                    pwidget->setCH(nSubPag);
+                    pwidget->update();
+                    //qDebug() <<"V:"<<strV<<";A"<<strA<<";W:"<<strW;
+                }
+                else if(nMode==0&&nPage==0)
+                {
+                    pwidget->UpdateDate();
+                    pwidget->update();
+                }
+            }else
+            {
+                int nMode=pwidget->getShowModeIndex();
+                int nPage=pwidget->getShowPagIndex();
+                ReadShmMaxch();
+                if(nMode==0&&nPage!=0)
+                {
+                    int nSubPag=pwidget->getShowSubIndex();
+                    int nPHIndex=pwidget->getShowPHIndex();
+                    setShmChRead(nSubPag,nPHIndex);
+                    ReadShmData();
+                    pwidget->SetV(strV);
+                    pwidget->SetA(strA);
+                    pwidget->SetW(strW);
+                    pwidget->SetF(strF);
+                    pwidget->SetSUM(strS);
+                    pwidget->SetStatus(strStatus);
+                    pwidget->setCH(nSubPag);
+                    pwidget->SetT(strT);
+                    pwidget->SetH(strH);
+                    pwidget->update();
+                    //qDebug() <<"V:"<<strV<<";A"<<strA<<";W:"<<strW;
+                }
+                else if(nMode==0&&nPage==0)
+                {
+                    pwidget->UpdateDate();
+                    pwidget->update();
+                }
+            }
+        }
+        sleep(1);
+    }
+}
+
+void DataUpdateThread::ReadSqlData(int nCHID)
+{
+    if(!isDBOpen)
+    {
+        return;
+    }
+    QSqlQuery sql_query(m_db);
+    QString strSql=QString("SELECT * FROM Table_PowerInfo WHERE product_id=1 AND product_ch_id=%1 ORDER BY product_Index DESC LIMIT 1").arg(nCHID);
+    //qDebug()<<strSql;
+    if (sql_query.exec(strSql))
+    {
+        while (sql_query.next())
+        {
+            strV = sql_query.value("product_ch_voltage").toString();
+            strA = sql_query.value("product_ch_current").toString();
+            strW = sql_query.value("product_ch_power").toString();
+            strF = sql_query.value("product_ch_power_freq").toString();
+            strS = sql_query.value("product_ch_consumption").toString();
+            //qDebug() <<"V:"<<strV<<";A"<<strA<<";W:"<<strW;
+        }
+    }else
+    {
+        qDebug()<<sql_query.lastError().text();
+    }
+
+}
+
+void DataUpdateThread::ReadMaxCh()
+{
+    if(!isDBOpen)
+    {
+        return;
+    }
+    QSqlQuery sql_query(m_db);
+    QString strSql=QString("SELECT MAX(product_ch_id) as maxCh FROM Table_PowerManage ");
+    //qDebug()<<strSql;
+    if (sql_query.exec(strSql))
+    {
+        while (sql_query.next())
+        {
+            nMaxCh = sql_query.value("maxCh").toInt();
+            if(pwidget)
+            {
+                pwidget->nMAXChildIndex=nMaxCh;
+            }
+        }
+    }else
+    {
+        qDebug()<<sql_query.lastError().text();
+    }
+}
+
+int DataUpdateThread::initShm()
+{
+    /* 创建共享内存对象 */
+    shm_fd = shm_open(SHM_NAME, O_CREAT | O_RDWR, 0666);
+    if (shm_fd == -1) {
+        perror("shm_open");
+        return 1;
+    }
+
+    /* 设置共享内存对象的大小 */
+    qDebug()<<"=======================================";
+    qDebug()<<"SHM_SizeOf="<<sizeof(smartPDU_shm_data);
+    qDebug()<<"=======================================";
+    if (ftruncate(shm_fd, sizeof(smartPDU_shm_data)) == -1) {
+        perror("ftruncate");
+        return 2;
+    }
+    m_shmData = (smartPDU_shm_data*)mmap(NULL, sizeof(smartPDU_shm_data), PROT_READ|PROT_WRITE, MAP_SHARED, shm_fd, 0);
+    memset(m_shmData,0,sizeof(smartPDU_shm_data));
+    m_shmData->nSelectSensor=10;
+    nReadType=1;
+    return 0;
+}
+
+void DataUpdateThread::deleteShm()
+{
+    m_shmData->bPDUSet=-1;
+    if (munmap(m_shmData, sizeof(smartPDU_shm_data)) == -1) {
+        perror("munmap");
+        return;
+    }
+    if (shm_unlink(SHM_NAME) == -1) {
+        perror("shm_unlink");
+        return;
+    }
+    m_shmData=nullptr;
+}
+
+void DataUpdateThread::setShmChRead(int nCh,int nPhID)
+{
+    if(nReadType!=1&&!m_shmData)
+    {
+        return;
+    }
+    if(m_shmData->bPDUSet>0)
+    {
+        if(m_shmData->nSelectPowerCH!=nCh)
+        {
+
+            m_shmData->nSelectPowerCH=nCh;
+            qDebug()<<"ShmData_____bT_ACType:"<<bTacStatus<<"nSelectPowerCH:"<<m_shmData->nSelectPowerCH;
+            bTacStatus=m_shmData->bT_ACType;
+            pdu_Ctrl::instance()->isT_ACType=bTacStatus;
+            if(bTacStatus==1)
+            {
+                if(m_shmData->nSelectPh!=nPhID)
+                {
+                   m_shmData->nSelectPh=nPhID;
+                   qDebug()<<"ShmData_____nSelectPowerCH:"<<m_shmData->nSelectPowerCH<<"nSelectPh:"<<m_shmData->nSelectPh;
+                }
+
+            }else
+            {
+                m_shmData->nSelectPh=0;
+            }
+            m_shmData->bPDUSet=0;            
+        }
+
+    }
+}
+
+void DataUpdateThread::ReadShmData()
+{
+    if(nReadType!=1&&!m_shmData)
+    {
+        return;
+    }
+    if(m_shmData->bPDUSet>0)
+    {
+        if(m_shmData->fV>=0.1)
+        {
+            strV = QString::number(m_shmData->fV,'f',2);
+        }else
+        {
+            strV = "0.00";
+        }
+
+        if(m_shmData->fA>=0.01)
+        {
+            strA = QString::number(m_shmData->fA,'f',2);
+        }else
+        {
+            strA="0.00";
+        }
+        strW = QString::number(m_shmData->fW,'f',2);
+        strF = QString::number(m_shmData->fF,'f',2);
+        strS = QString::number(m_shmData->fS,'f',2);
+        if(m_shmData->nStatus==0)
+        {
+            strStatus="OFF";
+        }else
+        {
+            strStatus="ON";
+        }
+        strT = QString::number(m_shmData->fT,'f',2);
+        strH = QString::number(m_shmData->fH,'f',2);
+    }
+}
+
+void DataUpdateThread::ReadShmMaxch()
+{
+    if(nReadType!=1&&!m_shmData)
+    {
+        if(pwidget)
+        {
+            pwidget->nMAXChildIndex=0;
+        }
+        return;
+    }
+    if(pwidget&&m_shmData->bPDUSet>0)
+    {
+        if(pwidget->nMAXChildIndex!=m_shmData->nMaxCh)
+        {
+           pwidget->nMAXChildIndex=m_shmData->nMaxCh;
+        }
+    }
+}
+
+int DataUpdateThread::isT_ACType()
+{
+    return bTacStatus;
+}
+
+

+ 80 - 0
Qt/Qt_Test_242/dataupdatethread.h

@@ -0,0 +1,80 @@
+#ifndef DATAUPDATETHREAD_H
+#define DATAUPDATETHREAD_H
+
+#include <QObject>
+#include <QThread>
+#include <QtSql>
+#include "widget.h"
+#include <QDebug>
+
+#define SHM_NAME "/smartPDU_shm"
+#include "pdu_ctrl.h"
+struct smartPDU_shm_data
+{
+    //电源数据
+    int bPDUSet;
+    int nSelectPowerCH;
+    int nMaxCh;
+    float fV;
+    float fA;
+    float fW;
+    float fF;
+    float fS;
+    int nStatus;
+    //传感器数据
+    int nSelectSensor;
+    float fT;//温度
+    float fH;//湿度
+    //三项数据
+    int bT_ACType;//三相类型
+    int nSelectPh;//当前通道的三相ph参数:0:A相 1:B相 2:C相 -1通道总计
+};
+class DataUpdateThread : public QThread
+{
+    Q_OBJECT
+public:
+    DataUpdateThread(QObject *parent);
+    ~DataUpdateThread();
+    void InitSql();
+
+    void run();
+
+    void ReadSqlData(int nCHID=0);
+    void ReadMaxCh();
+
+    //共享内存初始化
+    int initShm();
+    void deleteShm();
+    void setShmChRead(int nCh,int nPhID);
+    void ReadShmData();
+    void ReadShmMaxch();
+    int isT_ACType();//三相标志
+public:
+    //窗口
+    Widget* pwidget;
+    //sql地址
+    QString strSqliteAddress;
+
+    QSqlDatabase m_db;
+
+    bool isRunStats;
+    bool isDBOpen;
+
+    QString strV;
+    QString strA;
+    QString strW;
+    QString strF;
+    QString strS;
+    QString strT;
+    QString strH;
+    QString strStatus;
+    int nMaxCh;
+
+    int nReadType;
+    int shm_fd;
+
+    int bTacStatus;
+    smartPDU_shm_data* m_shmData;
+};
+
+#endif // DATAUPDATETHREAD_H

+ 63 - 0
Qt/Qt_Test_242/main.cpp

@@ -0,0 +1,63 @@
+#include "widget.h"
+#include <QApplication>
+#include "dataupdatethread.h"
+#include "buttonclickthread.h"
+#include <QScreen>
+#include <QGraphicsScene>
+#include <QGraphicsView>
+#include "pdu_ctrl.h"
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    //窗口初始化
+    pdu_Ctrl::instance();
+    Widget w;
+    qDebug()<<"widget End";
+    QGraphicsScene *scene   = new QGraphicsScene;
+    QGraphicsView *gview    = new QGraphicsView(scene);
+    QGraphicsProxyWidget *g_proxy_widget;
+    qDebug()<<"x:"<<w.size().width()<<"y:"<<w.size().height();
+    QScreen *desktop        = QApplication::primaryScreen();
+    QRect screen_info       = desktop->geometry();
+    // Rotation 90 degree
+    g_proxy_widget = scene->addWidget((QWidget*)&w);
+    g_proxy_widget->setRotation(0);
+    // Set window size
+    w.resize(screen_info.width(), screen_info.height());
+    qDebug()<<"Rect:x="<<screen_info.width()<<"y="<<screen_info.height();
+
+    pdu_Ctrl::instance()->InitData(&w,g_proxy_widget,gview,screen_info.width(), screen_info.height());
+    gview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    gview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    gview->setStyleSheet("border:none");
+    gview->showFullScreen();
+
+    qDebug()<<"x:"<<w.size().width()<<"y:"<<w.size().height();
+
+    qDebug()<<"Thread start";
+    QString appDirPath = QCoreApplication::applicationDirPath();
+    pdu_Ctrl::instance()->strSqliteAddress=appDirPath+"/pdu_dat.db";
+    pdu_Ctrl::instance()->ReadModbusInit();
+    //============================线程开启====================================
+    //数据更新线程
+    DataUpdateThread thread_Update(nullptr);
+    thread_Update.pwidget=&w;
+    //QString appDirPath = QCoreApplication::applicationDirPath();
+    //thread_Update.strSqliteAddress=appDirPath+"/pdu_dat.db";
+    thread_Update.initShm();
+    thread_Update.start();
+    //GPIO更新线程
+    ButtonClickThread thread_Button(nullptr);
+    thread_Button.InitConnect();
+    thread_Button.start();
+    //thread_Button.InitConnect();
+
+    int ret=a.exec();
+    //析构
+    thread_Update.isRunStats=false;
+    thread_Update.wait();
+    thread_Button.isRunning=false;
+    thread_Button.wait();
+    pdu_Ctrl::distory();
+    return ret;
+}

+ 211 - 0
Qt/Qt_Test_242/moc_buttonclickthread.cpp

@@ -0,0 +1,211 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'buttonclickthread.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.5)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "buttonclickthread.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'buttonclickthread.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.12.5. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+struct qt_meta_stringdata_ButtonClickThread_t {
+    QByteArrayData data[9];
+    char stringdata0[136];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_ButtonClickThread_t, stringdata0) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_ButtonClickThread_t qt_meta_stringdata_ButtonClickThread = {
+    {
+QT_MOC_LITERAL(0, 0, 17), // "ButtonClickThread"
+QT_MOC_LITERAL(1, 18, 18), // "signal_ButtonClear"
+QT_MOC_LITERAL(2, 37, 0), // ""
+QT_MOC_LITERAL(3, 38, 5), // "KeyID"
+QT_MOC_LITERAL(4, 44, 18), // "signal_ButtonClick"
+QT_MOC_LITERAL(5, 63, 24), // "signal_ButtonLongPressed"
+QT_MOC_LITERAL(6, 88, 24), // "signal_ButtonDoubleClick"
+QT_MOC_LITERAL(7, 113, 15), // "signal_AngleSet"
+QT_MOC_LITERAL(8, 129, 6) // "nAngle"
+
+    },
+    "ButtonClickThread\0signal_ButtonClear\0"
+    "\0KeyID\0signal_ButtonClick\0"
+    "signal_ButtonLongPressed\0"
+    "signal_ButtonDoubleClick\0signal_AngleSet\0"
+    "nAngle"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_ButtonClickThread[] = {
+
+ // content:
+       8,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       5,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       5,       // signalCount
+
+ // signals: name, argc, parameters, tag, flags
+       1,    1,   39,    2, 0x06 /* Public */,
+       4,    1,   42,    2, 0x06 /* Public */,
+       5,    1,   45,    2, 0x06 /* Public */,
+       6,    1,   48,    2, 0x06 /* Public */,
+       7,    1,   51,    2, 0x06 /* Public */,
+
+ // signals: parameters
+    QMetaType::Void, QMetaType::Int,    3,
+    QMetaType::Void, QMetaType::Int,    3,
+    QMetaType::Void, QMetaType::Int,    3,
+    QMetaType::Void, QMetaType::Int,    3,
+    QMetaType::Void, QMetaType::Int,    8,
+
+       0        // eod
+};
+
+void ButtonClickThread::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        auto *_t = static_cast<ButtonClickThread *>(_o);
+        Q_UNUSED(_t)
+        switch (_id) {
+        case 0: _t->signal_ButtonClear((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 1: _t->signal_ButtonClick((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 2: _t->signal_ButtonLongPressed((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 3: _t->signal_ButtonDoubleClick((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 4: _t->signal_AngleSet((*reinterpret_cast< int(*)>(_a[1]))); break;
+        default: ;
+        }
+    } else if (_c == QMetaObject::IndexOfMethod) {
+        int *result = reinterpret_cast<int *>(_a[0]);
+        {
+            using _t = void (ButtonClickThread::*)(int );
+            if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&ButtonClickThread::signal_ButtonClear)) {
+                *result = 0;
+                return;
+            }
+        }
+        {
+            using _t = void (ButtonClickThread::*)(int );
+            if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&ButtonClickThread::signal_ButtonClick)) {
+                *result = 1;
+                return;
+            }
+        }
+        {
+            using _t = void (ButtonClickThread::*)(int );
+            if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&ButtonClickThread::signal_ButtonLongPressed)) {
+                *result = 2;
+                return;
+            }
+        }
+        {
+            using _t = void (ButtonClickThread::*)(int );
+            if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&ButtonClickThread::signal_ButtonDoubleClick)) {
+                *result = 3;
+                return;
+            }
+        }
+        {
+            using _t = void (ButtonClickThread::*)(int );
+            if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&ButtonClickThread::signal_AngleSet)) {
+                *result = 4;
+                return;
+            }
+        }
+    }
+}
+
+QT_INIT_METAOBJECT const QMetaObject ButtonClickThread::staticMetaObject = { {
+    &QThread::staticMetaObject,
+    qt_meta_stringdata_ButtonClickThread.data,
+    qt_meta_data_ButtonClickThread,
+    qt_static_metacall,
+    nullptr,
+    nullptr
+} };
+
+
+const QMetaObject *ButtonClickThread::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *ButtonClickThread::qt_metacast(const char *_clname)
+{
+    if (!_clname) return nullptr;
+    if (!strcmp(_clname, qt_meta_stringdata_ButtonClickThread.stringdata0))
+        return static_cast<void*>(this);
+    return QThread::qt_metacast(_clname);
+}
+
+int ButtonClickThread::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QThread::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 5)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 5;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 5)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 5;
+    }
+    return _id;
+}
+
+// SIGNAL 0
+void ButtonClickThread::signal_ButtonClear(int _t1)
+{
+    void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
+    QMetaObject::activate(this, &staticMetaObject, 0, _a);
+}
+
+// SIGNAL 1
+void ButtonClickThread::signal_ButtonClick(int _t1)
+{
+    void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
+    QMetaObject::activate(this, &staticMetaObject, 1, _a);
+}
+
+// SIGNAL 2
+void ButtonClickThread::signal_ButtonLongPressed(int _t1)
+{
+    void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
+    QMetaObject::activate(this, &staticMetaObject, 2, _a);
+}
+
+// SIGNAL 3
+void ButtonClickThread::signal_ButtonDoubleClick(int _t1)
+{
+    void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
+    QMetaObject::activate(this, &staticMetaObject, 3, _a);
+}
+
+// SIGNAL 4
+void ButtonClickThread::signal_AngleSet(int _t1)
+{
+    void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
+    QMetaObject::activate(this, &staticMetaObject, 4, _a);
+}
+QT_WARNING_POP
+QT_END_MOC_NAMESPACE

+ 94 - 0
Qt/Qt_Test_242/moc_dataupdatethread.cpp

@@ -0,0 +1,94 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'dataupdatethread.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.5)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "dataupdatethread.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'dataupdatethread.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.12.5. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+struct qt_meta_stringdata_DataUpdateThread_t {
+    QByteArrayData data[1];
+    char stringdata0[17];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_DataUpdateThread_t, stringdata0) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_DataUpdateThread_t qt_meta_stringdata_DataUpdateThread = {
+    {
+QT_MOC_LITERAL(0, 0, 16) // "DataUpdateThread"
+
+    },
+    "DataUpdateThread"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_DataUpdateThread[] = {
+
+ // content:
+       8,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       0,    0, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+       0        // eod
+};
+
+void DataUpdateThread::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    Q_UNUSED(_o);
+    Q_UNUSED(_id);
+    Q_UNUSED(_c);
+    Q_UNUSED(_a);
+}
+
+QT_INIT_METAOBJECT const QMetaObject DataUpdateThread::staticMetaObject = { {
+    &QThread::staticMetaObject,
+    qt_meta_stringdata_DataUpdateThread.data,
+    qt_meta_data_DataUpdateThread,
+    qt_static_metacall,
+    nullptr,
+    nullptr
+} };
+
+
+const QMetaObject *DataUpdateThread::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *DataUpdateThread::qt_metacast(const char *_clname)
+{
+    if (!_clname) return nullptr;
+    if (!strcmp(_clname, qt_meta_stringdata_DataUpdateThread.stringdata0))
+        return static_cast<void*>(this);
+    return QThread::qt_metacast(_clname);
+}
+
+int DataUpdateThread::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QThread::qt_metacall(_c, _id, _a);
+    return _id;
+}
+QT_WARNING_POP
+QT_END_MOC_NAMESPACE

+ 137 - 0
Qt/Qt_Test_242/moc_pdu_ctrl.cpp

@@ -0,0 +1,137 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'pdu_ctrl.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.5)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "pdu_ctrl.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'pdu_ctrl.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.12.5. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+struct qt_meta_stringdata_pdu_Ctrl_t {
+    QByteArrayData data[9];
+    char stringdata0[97];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_pdu_Ctrl_t, stringdata0) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_pdu_Ctrl_t qt_meta_stringdata_pdu_Ctrl = {
+    {
+QT_MOC_LITERAL(0, 0, 8), // "pdu_Ctrl"
+QT_MOC_LITERAL(1, 9, 13), // "slot_setAngel"
+QT_MOC_LITERAL(2, 23, 0), // ""
+QT_MOC_LITERAL(3, 24, 6), // "nAngle"
+QT_MOC_LITERAL(4, 31, 13), // "slot_ClickBtn"
+QT_MOC_LITERAL(5, 45, 7), // "nButton"
+QT_MOC_LITERAL(6, 53, 14), // "slot_DClickBtn"
+QT_MOC_LITERAL(7, 68, 14), // "slot_LClickBtn"
+QT_MOC_LITERAL(8, 83, 13) // "slot_BtnClear"
+
+    },
+    "pdu_Ctrl\0slot_setAngel\0\0nAngle\0"
+    "slot_ClickBtn\0nButton\0slot_DClickBtn\0"
+    "slot_LClickBtn\0slot_BtnClear"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_pdu_Ctrl[] = {
+
+ // content:
+       8,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       5,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    1,   39,    2, 0x0a /* Public */,
+       4,    1,   42,    2, 0x0a /* Public */,
+       6,    1,   45,    2, 0x0a /* Public */,
+       7,    1,   48,    2, 0x0a /* Public */,
+       8,    1,   51,    2, 0x0a /* Public */,
+
+ // slots: parameters
+    QMetaType::Void, QMetaType::Int,    3,
+    QMetaType::Void, QMetaType::Int,    5,
+    QMetaType::Void, QMetaType::Int,    5,
+    QMetaType::Void, QMetaType::Int,    5,
+    QMetaType::Void, QMetaType::Int,    5,
+
+       0        // eod
+};
+
+void pdu_Ctrl::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        auto *_t = static_cast<pdu_Ctrl *>(_o);
+        Q_UNUSED(_t)
+        switch (_id) {
+        case 0: _t->slot_setAngel((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 1: _t->slot_ClickBtn((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 2: _t->slot_DClickBtn((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 3: _t->slot_LClickBtn((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 4: _t->slot_BtnClear((*reinterpret_cast< int(*)>(_a[1]))); break;
+        default: ;
+        }
+    }
+}
+
+QT_INIT_METAOBJECT const QMetaObject pdu_Ctrl::staticMetaObject = { {
+    &QObject::staticMetaObject,
+    qt_meta_stringdata_pdu_Ctrl.data,
+    qt_meta_data_pdu_Ctrl,
+    qt_static_metacall,
+    nullptr,
+    nullptr
+} };
+
+
+const QMetaObject *pdu_Ctrl::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *pdu_Ctrl::qt_metacast(const char *_clname)
+{
+    if (!_clname) return nullptr;
+    if (!strcmp(_clname, qt_meta_stringdata_pdu_Ctrl.stringdata0))
+        return static_cast<void*>(this);
+    return QObject::qt_metacast(_clname);
+}
+
+int pdu_Ctrl::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QObject::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 5)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 5;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 5)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 5;
+    }
+    return _id;
+}
+QT_WARNING_POP
+QT_END_MOC_NAMESPACE

+ 480 - 0
Qt/Qt_Test_242/moc_predefs.h

@@ -0,0 +1,480 @@
+#define __DBL_MIN_EXP__ (-1021)
+#define __HQ_FBIT__ 15
+#define __FLT32X_MAX_EXP__ 1024
+#define __cpp_attributes 200809
+#define __UINT_LEAST16_MAX__ 0xffff
+#define __ARM_SIZEOF_WCHAR_T 4
+#define __ATOMIC_ACQUIRE 2
+#define __SFRACT_IBIT__ 0
+#define __FLT_MIN__ 1.1754943508222875e-38F
+#define __GCC_IEC_559_COMPLEX 2
+#define __cpp_aggregate_nsdmi 201304
+#define __UFRACT_MAX__ 0XFFFFP-16UR
+#define __UINT_LEAST8_TYPE__ unsigned char
+#define __DQ_FBIT__ 63
+#define __INTMAX_C(c) c ## LL
+#define __ARM_FEATURE_SAT 1
+#define __ULFRACT_FBIT__ 32
+#define __SACCUM_EPSILON__ 0x1P-7HK
+#define __CHAR_BIT__ 8
+#define __USQ_IBIT__ 0
+#define __UINT8_MAX__ 0xff
+#define __ACCUM_FBIT__ 15
+#define __WINT_MAX__ 0xffffffffU
+#define __FLT32_MIN_EXP__ (-125)
+#define __cpp_static_assert 200410
+#define __USFRACT_FBIT__ 8
+#define __ORDER_LITTLE_ENDIAN__ 1234
+#define __SIZE_MAX__ 0xffffffffU
+#define __ARM_ARCH_ISA_ARM 1
+#define __WCHAR_MAX__ 0xffffffffU
+#define __LACCUM_IBIT__ 32
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
+#define __DBL_DENORM_MIN__ double(4.9406564584124654e-324L)
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
+#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
+#define __GCC_IEC_559 2
+#define __FLT32X_DECIMAL_DIG__ 17
+#define __FLT_EVAL_METHOD__ 0
+#define __unix__ 1
+#define __cpp_binary_literals 201304
+#define __LLACCUM_MAX__ 0X7FFFFFFFFFFFFFFFP-31LLK
+#define __FLT64_DECIMAL_DIG__ 17
+#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
+#define __FRACT_FBIT__ 15
+#define __cpp_variadic_templates 200704
+#define __UINT_FAST64_MAX__ 0xffffffffffffffffULL
+#define __SIG_ATOMIC_TYPE__ int
+#define __UACCUM_FBIT__ 16
+#define __DBL_MIN_10_EXP__ (-307)
+#define __FINITE_MATH_ONLY__ 0
+#define __ARMEL__ 1
+#define __cpp_variable_templates 201304
+#define __ARM_FEATURE_UNALIGNED 1
+#define __LFRACT_IBIT__ 0
+#define __GNUC_PATCHLEVEL__ 1
+#define __FLT32_HAS_DENORM__ 1
+#define __LFRACT_MAX__ 0X7FFFFFFFP-31LR
+#define __UINT_FAST8_MAX__ 0xff
+#define __has_include(STR) __has_include__(STR)
+#define __DEC64_MAX_EXP__ 385
+#define __INT8_C(c) c
+#define __INT_LEAST8_WIDTH__ 8
+#define __UINT_LEAST64_MAX__ 0xffffffffffffffffULL
+#define __SA_FBIT__ 15
+#define __SHRT_MAX__ 0x7fff
+#define __LDBL_MAX__ 1.7976931348623157e+308L
+#define __ARM_FEATURE_IDIV 1
+#define __FRACT_MAX__ 0X7FFFP-15R
+#define __UFRACT_FBIT__ 16
+#define __ARM_FP 14
+#define __UFRACT_MIN__ 0.0UR
+#define __UINT_LEAST8_MAX__ 0xff
+#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
+#define __UINTMAX_TYPE__ long long unsigned int
+#define __LLFRACT_EPSILON__ 0x1P-63LLR
+#define __linux 1
+#define __DEC32_EPSILON__ 1E-6DF
+#define __FLT_EVAL_METHOD_TS_18661_3__ 0
+#define __CHAR_UNSIGNED__ 1
+#define __UINT32_MAX__ 0xffffffffU
+#define __GXX_EXPERIMENTAL_CXX0X__ 1
+#define __ULFRACT_MAX__ 0XFFFFFFFFP-32ULR
+#define __TA_IBIT__ 64
+#define __LDBL_MAX_EXP__ 1024
+#define __WINT_MIN__ 0U
+#define __linux__ 1
+#define __INT_LEAST16_WIDTH__ 16
+#define __ULLFRACT_MIN__ 0.0ULLR
+#define __SCHAR_MAX__ 0x7f
+#define __WCHAR_MIN__ 0U
+#define __INT64_C(c) c ## LL
+#define __DBL_DIG__ 15
+#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
+#define __LLACCUM_MIN__ (-0X1P31LLK-0X1P31LLK)
+#define __SIZEOF_INT__ 4
+#define __SIZEOF_POINTER__ 4
+#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
+#define __USACCUM_IBIT__ 8
+#define __USER_LABEL_PREFIX__ 
+#define __STDC_HOSTED__ 1
+#define __LDBL_HAS_INFINITY__ 1
+#define __LFRACT_MIN__ (-0.5LR-0.5LR)
+#define __HA_IBIT__ 8
+#define __FLT32_DIG__ 6
+#define __TQ_IBIT__ 0
+#define __FLT_EPSILON__ 1.1920928955078125e-7F
+#define __APCS_32__ 1
+#define __GXX_WEAK__ 1
+#define __SHRT_WIDTH__ 16
+#define __USFRACT_IBIT__ 0
+#define __LDBL_MIN__ 2.2250738585072014e-308L
+#define __FRACT_MIN__ (-0.5R-0.5R)
+#define __DEC32_MAX__ 9.999999E96DF
+#define __cpp_threadsafe_static_init 200806
+#define __DA_IBIT__ 32
+#define __ARM_SIZEOF_MINIMAL_ENUM 4
+#define __FLT32X_HAS_INFINITY__ 1
+#define __INT32_MAX__ 0x7fffffff
+#define __UQQ_FBIT__ 8
+#define __INT_WIDTH__ 32
+#define __SIZEOF_LONG__ 4
+#define __UACCUM_MAX__ 0XFFFFFFFFP-16UK
+#define __STDC_IEC_559__ 1
+#define __STDC_ISO_10646__ 201505L
+#define __UINT16_C(c) c
+#define __PTRDIFF_WIDTH__ 32
+#define __DECIMAL_DIG__ 17
+#define __LFRACT_EPSILON__ 0x1P-31LR
+#define __FLT64_EPSILON__ 2.2204460492503131e-16F64
+#define __ULFRACT_MIN__ 0.0ULR
+#define __gnu_linux__ 1
+#define __INTMAX_WIDTH__ 64
+#define __FLT64_MIN_EXP__ (-1021)
+#define __has_include_next(STR) __has_include_next__(STR)
+#define __LDBL_HAS_QUIET_NAN__ 1
+#define __ULACCUM_IBIT__ 32
+#define __FLT64_MANT_DIG__ 53
+#define __UACCUM_EPSILON__ 0x1P-16UK
+#define __GNUC__ 7
+#define __ULLACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULLK
+#define __GXX_RTTI 1
+#define __cpp_delegating_constructors 200604
+#define __HQ_IBIT__ 0
+#define __FLT_HAS_DENORM__ 1
+#define __SIZEOF_LONG_DOUBLE__ 8
+#define __BIGGEST_ALIGNMENT__ 8
+#define __STDC_UTF_16__ 1
+#define __FLT64_MAX_10_EXP__ 308
+#define __GNUC_STDC_INLINE__ 1
+#define __DQ_IBIT__ 0
+#define __FLT32_HAS_INFINITY__ 1
+#define __DBL_MAX__ double(1.7976931348623157e+308L)
+#define __ULFRACT_IBIT__ 0
+#define __cpp_raw_strings 200710
+#define __INT_FAST32_MAX__ 0x7fffffff
+#define __DBL_HAS_INFINITY__ 1
+#define __INT64_MAX__ 0x7fffffffffffffffLL
+#define __ACCUM_IBIT__ 16
+#define __DEC32_MIN_EXP__ (-94)
+#define __THUMB_INTERWORK__ 1
+#define __INTPTR_WIDTH__ 32
+#define __LACCUM_MAX__ 0X7FFFFFFFFFFFFFFFP-31LK
+#define __FLT32X_HAS_DENORM__ 1
+#define __INT_FAST16_TYPE__ int
+#define __LDBL_HAS_DENORM__ 1
+#define __ARM_FEATURE_LDREX 15
+#define __cplusplus 201402L
+#define __cpp_ref_qualifiers 200710
+#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
+#define __INT_LEAST32_MAX__ 0x7fffffff
+#define __ARM_PCS 1
+#define __DEC32_MIN__ 1E-95DF
+#define __ACCUM_MAX__ 0X7FFFFFFFP-15K
+#define __DEPRECATED 1
+#define __cpp_rvalue_references 200610
+#define __DBL_MAX_EXP__ 1024
+#define __USACCUM_EPSILON__ 0x1P-8UHK
+#define __WCHAR_WIDTH__ 32
+#define __FLT32_MAX__ 3.4028234663852886e+38F32
+#define __DEC128_EPSILON__ 1E-33DL
+#define __SFRACT_MAX__ 0X7FP-7HR
+#define __FRACT_IBIT__ 0
+#define __PTRDIFF_MAX__ 0x7fffffff
+#define __UACCUM_MIN__ 0.0UK
+#define __STDC_NO_THREADS__ 1
+#define __UACCUM_IBIT__ 16
+#define __FLT32_HAS_QUIET_NAN__ 1
+#define __GNUG__ 7
+#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
+#define __SIZEOF_SIZE_T__ 4
+#define __ULACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULK
+#define __cpp_rvalue_reference 200610
+#define __cpp_nsdmi 200809
+#define __SIZEOF_WINT_T__ 4
+#define __LONG_LONG_WIDTH__ 64
+#define __cpp_initializer_lists 200806
+#define __FLT32_MAX_EXP__ 128
+#define __SA_IBIT__ 16
+#define __ULLACCUM_MIN__ 0.0ULLK
+#define __cpp_hex_float 201603
+#define __GCC_HAVE_DWARF2_CFI_ASM 1
+#define __GXX_ABI_VERSION 1011
+#define __UTA_FBIT__ 64
+#define __FLT_MIN_EXP__ (-125)
+#define __USFRACT_MAX__ 0XFFP-8UHR
+#define __UFRACT_IBIT__ 0
+#define __cpp_lambdas 200907
+#define __ARM_FEATURE_QBIT 1
+#define __INT_FAST64_TYPE__ long long int
+#define __FP_FAST_FMAF 1
+#define __FP_FAST_FMAL 1
+#define __FLT64_DENORM_MIN__ 4.9406564584124654e-324F64
+#define __DBL_MIN__ double(2.2250738585072014e-308L)
+#define __FLT32X_EPSILON__ 2.2204460492503131e-16F32x
+#define __LACCUM_MIN__ (-0X1P31LK-0X1P31LK)
+#define __ULLACCUM_FBIT__ 32
+#define __GXX_TYPEINFO_EQUALITY_INLINE 0
+#define __FLT64_MIN_10_EXP__ (-307)
+#define __ULLFRACT_EPSILON__ 0x1P-64ULLR
+#define __DEC128_MIN__ 1E-6143DL
+#define __REGISTER_PREFIX__ 
+#define __UINT16_MAX__ 0xffff
+#define __DBL_HAS_DENORM__ 1
+#define __ACCUM_MIN__ (-0X1P15K-0X1P15K)
+#define __SQ_IBIT__ 0
+#define __FLT32_MIN__ 1.1754943508222875e-38F32
+#define __UINT8_TYPE__ unsigned char
+#define __UHA_FBIT__ 8
+#define __NO_INLINE__ 1
+#define __SFRACT_MIN__ (-0.5HR-0.5HR)
+#define __UTQ_FBIT__ 128
+#define __FLT_MANT_DIG__ 24
+#define __LDBL_DECIMAL_DIG__ 17
+#define __VERSION__ "7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701]"
+#define __UINT64_C(c) c ## ULL
+#define __ULLFRACT_FBIT__ 64
+#define __cpp_unicode_characters 200704
+#define __FRACT_EPSILON__ 0x1P-15R
+#define __ULACCUM_MIN__ 0.0ULK
+#define _STDC_PREDEF_H 1
+#define __UDA_FBIT__ 32
+#define __cpp_decltype_auto 201304
+#define __LLACCUM_EPSILON__ 0x1P-31LLK
+#define __ARM_FEATURE_FMA 1
+#define __GCC_ATOMIC_INT_LOCK_FREE 2
+#define __FLT32_MANT_DIG__ 24
+#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
+#define __USFRACT_MIN__ 0.0UHR
+#define __ULLACCUM_IBIT__ 32
+#define __UQQ_IBIT__ 0
+#define __STDC_IEC_559_COMPLEX__ 1
+#define __SCHAR_WIDTH__ 8
+#define __INT32_C(c) c
+#define __DEC64_EPSILON__ 1E-15DD
+#define __ORDER_PDP_ENDIAN__ 3412
+#define __DEC128_MIN_EXP__ (-6142)
+#define __UHQ_FBIT__ 16
+#define __LLACCUM_FBIT__ 31
+#define __FLT32_MAX_10_EXP__ 38
+#define __LINARO_SPIN__ 0
+#define __INT_FAST32_TYPE__ int
+#define __UINT_LEAST16_TYPE__ short unsigned int
+#define unix 1
+#define __INT16_MAX__ 0x7fff
+#define __cpp_rtti 199711
+#define __SIZE_TYPE__ unsigned int
+#define __UINT64_MAX__ 0xffffffffffffffffULL
+#define __UDQ_FBIT__ 64
+#define __INT8_TYPE__ signed char
+#define __cpp_digit_separators 201309
+#define __ELF__ 1
+#define __ULFRACT_EPSILON__ 0x1P-32ULR
+#define __LLFRACT_FBIT__ 63
+#define __FLT_RADIX__ 2
+#define __INT_LEAST16_TYPE__ short int
+#define __ARM_ARCH_PROFILE 65
+#define __LDBL_EPSILON__ 2.2204460492503131e-16L
+#define __UINTMAX_C(c) c ## ULL
+#define __SACCUM_MAX__ 0X7FFFP-7HK
+#define __SIG_ATOMIC_MAX__ 0x7fffffff
+#define __LINARO_RELEASE__ 201805
+#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
+#define __cpp_sized_deallocation 201309
+#define __VFP_FP__ 1
+#define __SIZEOF_PTRDIFF_T__ 4
+#define __FLT32X_MANT_DIG__ 53
+#define __LACCUM_EPSILON__ 0x1P-31LK
+#define __FLT32X_MIN_EXP__ (-1021)
+#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
+#define __INT_FAST16_MAX__ 0x7fffffff
+#define __FLT64_DIG__ 15
+#define __UINT_FAST32_MAX__ 0xffffffffU
+#define __UINT_LEAST64_TYPE__ long long unsigned int
+#define __USACCUM_MAX__ 0XFFFFP-8UHK
+#define __SFRACT_EPSILON__ 0x1P-7HR
+#define __FLT_HAS_QUIET_NAN__ 1
+#define __FLT_MAX_10_EXP__ 38
+#define __LONG_MAX__ 0x7fffffffL
+#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
+#define __FLT_HAS_INFINITY__ 1
+#define __unix 1
+#define __cpp_unicode_literals 200710
+#define __USA_FBIT__ 16
+#define __UINT_FAST16_TYPE__ unsigned int
+#define __DEC64_MAX__ 9.999999999999999E384DD
+#define __ARM_32BIT_STATE 1
+#define __INT_FAST32_WIDTH__ 32
+#define __CHAR16_TYPE__ short unsigned int
+#define __PRAGMA_REDEFINE_EXTNAME 1
+#define __SIZE_WIDTH__ 32
+#define __INT_LEAST16_MAX__ 0x7fff
+#define __DEC64_MANT_DIG__ 16
+#define __UINT_LEAST32_MAX__ 0xffffffffU
+#define __SACCUM_FBIT__ 7
+#define __FLT32_DENORM_MIN__ 1.4012984643248171e-45F32
+#define __GCC_ATOMIC_LONG_LOCK_FREE 2
+#define __SIG_ATOMIC_WIDTH__ 32
+#define __INT_LEAST64_TYPE__ long long int
+#define __ARM_FEATURE_CLZ 1
+#define __INT16_TYPE__ short int
+#define __INT_LEAST8_TYPE__ signed char
+#define __SQ_FBIT__ 31
+#define __DEC32_MAX_EXP__ 97
+#define __ARM_ARCH_ISA_THUMB 2
+#define __INT_FAST8_MAX__ 0x7f
+#define __ARM_ARCH 7
+#define __INTPTR_MAX__ 0x7fffffff
+#define __QQ_FBIT__ 7
+#define linux 1
+#define __cpp_range_based_for 200907
+#define __UTA_IBIT__ 64
+#define __FLT64_HAS_QUIET_NAN__ 1
+#define __FLT32_MIN_10_EXP__ (-37)
+#define __EXCEPTIONS 1
+#define __LDBL_MANT_DIG__ 53
+#define __SFRACT_FBIT__ 7
+#define __SACCUM_MIN__ (-0X1P7HK-0X1P7HK)
+#define __DBL_HAS_QUIET_NAN__ 1
+#define __FLT64_HAS_INFINITY__ 1
+#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
+#define __cpp_return_type_deduction 201304
+#define __INTPTR_TYPE__ int
+#define __UINT16_TYPE__ short unsigned int
+#define __WCHAR_TYPE__ unsigned int
+#define __SIZEOF_FLOAT__ 4
+#define __USQ_FBIT__ 32
+#define __UINTPTR_MAX__ 0xffffffffU
+#define __INT_FAST64_WIDTH__ 64
+#define __DEC64_MIN_EXP__ (-382)
+#define __cpp_decltype 200707
+#define __FLT32_DECIMAL_DIG__ 9
+#define __INT_FAST64_MAX__ 0x7fffffffffffffffLL
+#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
+#define __FLT_DIG__ 6
+#define __UINT_FAST64_TYPE__ long long unsigned int
+#define __INT_MAX__ 0x7fffffff
+#define __LACCUM_FBIT__ 31
+#define __USACCUM_MIN__ 0.0UHK
+#define __UHA_IBIT__ 8
+#define __INT64_TYPE__ long long int
+#define __FLT_MAX_EXP__ 128
+#define __UTQ_IBIT__ 0
+#define __DBL_MANT_DIG__ 53
+#define __cpp_inheriting_constructors 201511
+#define __INT_LEAST64_MAX__ 0x7fffffffffffffffLL
+#define __DEC64_MIN__ 1E-383DD
+#define __WINT_TYPE__ unsigned int
+#define __UINT_LEAST32_TYPE__ unsigned int
+#define __SIZEOF_SHORT__ 2
+#define __ULLFRACT_IBIT__ 0
+#define __LDBL_MIN_EXP__ (-1021)
+#define __arm__ 1
+#define __FLT64_MAX__ 1.7976931348623157e+308F64
+#define __UDA_IBIT__ 32
+#define __WINT_WIDTH__ 32
+#define __INT_LEAST8_MAX__ 0x7f
+#define __FLT32X_MAX_10_EXP__ 308
+#define __LFRACT_FBIT__ 31
+#define __WCHAR_UNSIGNED__ 1
+#define __ARM_ARCH_7A__ 1
+#define __LDBL_MAX_10_EXP__ 308
+#define __ATOMIC_RELAXED 0
+#define __DBL_EPSILON__ double(2.2204460492503131e-16L)
+#define __ARM_FEATURE_SIMD32 1
+#define __UINT8_C(c) c
+#define __FLT64_MAX_EXP__ 1024
+#define __INT_LEAST32_TYPE__ int
+#define __SIZEOF_WCHAR_T__ 4
+#define __LLFRACT_MAX__ 0X7FFFFFFFFFFFFFFFP-63LLR
+#define __TQ_FBIT__ 127
+#define __INT_FAST8_TYPE__ signed char
+#define __ULLACCUM_EPSILON__ 0x1P-32ULLK
+#define __UHQ_IBIT__ 0
+#define __LLACCUM_IBIT__ 32
+#define __FLT64_HAS_DENORM__ 1
+#define __FLT32_EPSILON__ 1.1920928955078125e-7F32
+#define __DBL_DECIMAL_DIG__ 17
+#define __STDC_UTF_32__ 1
+#define __INT_FAST8_WIDTH__ 8
+#define __DEC_EVAL_METHOD__ 2
+#define __FLT32X_MAX__ 1.7976931348623157e+308F32x
+#define __TA_FBIT__ 63
+#define __UDQ_IBIT__ 0
+#define __ORDER_BIG_ENDIAN__ 4321
+#define __cpp_runtime_arrays 198712
+#define __UINT64_TYPE__ long long unsigned int
+#define __ACCUM_EPSILON__ 0x1P-15K
+#define __UINT32_C(c) c ## U
+#define __INTMAX_MAX__ 0x7fffffffffffffffLL
+#define __cpp_alias_templates 200704
+#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
+#define __FLT_DENORM_MIN__ 1.4012984643248171e-45F
+#define __LLFRACT_IBIT__ 0
+#define __INT8_MAX__ 0x7f
+#define __LONG_WIDTH__ 32
+#define __UINT_FAST32_TYPE__ unsigned int
+#define __CHAR32_TYPE__ unsigned int
+#define __FLT_MAX__ 3.4028234663852886e+38F
+#define __FP_FAST_FMA 1
+#define __cpp_constexpr 201304
+#define __USACCUM_FBIT__ 8
+#define __INT32_TYPE__ int
+#define __SIZEOF_DOUBLE__ 8
+#define __cpp_exceptions 199711
+#define __FLT_MIN_10_EXP__ (-37)
+#define __UFRACT_EPSILON__ 0x1P-16UR
+#define __FLT64_MIN__ 2.2250738585072014e-308F64
+#define __INT_LEAST32_WIDTH__ 32
+#define __INTMAX_TYPE__ long long int
+#define __DEC128_MAX_EXP__ 6145
+#define __FLT32X_HAS_QUIET_NAN__ 1
+#define __ATOMIC_CONSUME 1
+#define __GNUC_MINOR__ 3
+#define __INT_FAST16_WIDTH__ 32
+#define __UINTMAX_MAX__ 0xffffffffffffffffULL
+#define __DEC32_MANT_DIG__ 7
+#define __FLT32X_DENORM_MIN__ 4.9406564584124654e-324F32x
+#define __HA_FBIT__ 7
+#define __DBL_MAX_10_EXP__ 308
+#define __LDBL_DENORM_MIN__ 4.9406564584124654e-324L
+#define __INT16_C(c) c
+#define __cpp_generic_lambdas 201304
+#define __STDC__ 1
+#define __FLT32X_DIG__ 15
+#define __PTRDIFF_TYPE__ int
+#define __LLFRACT_MIN__ (-0.5LLR-0.5LLR)
+#define __ATOMIC_SEQ_CST 5
+#define __DA_FBIT__ 31
+#define __UINT32_TYPE__ unsigned int
+#define __FLT32X_MIN_10_EXP__ (-307)
+#define __ARM_ARCH_EXT_IDIV__ 1
+#define __UINTPTR_TYPE__ unsigned int
+#define __USA_IBIT__ 16
+#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
+#define __ARM_EABI__ 1
+#define __DEC128_MANT_DIG__ 34
+#define __LDBL_MIN_10_EXP__ (-307)
+#define __SIZEOF_LONG_LONG__ 8
+#define __ULACCUM_EPSILON__ 0x1P-32ULK
+#define __cpp_user_defined_literals 200809
+#define __SACCUM_IBIT__ 8
+#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
+#define __FLT32X_MIN__ 2.2250738585072014e-308F32x
+#define __LDBL_DIG__ 15
+#define __FLT_DECIMAL_DIG__ 9
+#define __UINT_FAST16_MAX__ 0xffffffffU
+#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
+#define __INT_LEAST64_WIDTH__ 64
+#define __ULLFRACT_MAX__ 0XFFFFFFFFFFFFFFFFP-64ULLR
+#define __UINT_FAST8_TYPE__ unsigned char
+#define _GNU_SOURCE 1
+#define __USFRACT_EPSILON__ 0x1P-8UHR
+#define __ULACCUM_FBIT__ 32
+#define __ARM_FEATURE_DSP 1
+#define __QQ_IBIT__ 0
+#define __cpp_init_captures 201304
+#define __ATOMIC_ACQ_REL 4
+#define __ATOMIC_RELEASE 3

+ 94 - 0
Qt/Qt_Test_242/moc_udphelper.cpp

@@ -0,0 +1,94 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'udphelper.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.5)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "udphelper.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'udphelper.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.12.5. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+struct qt_meta_stringdata_UdpHelper_t {
+    QByteArrayData data[1];
+    char stringdata0[10];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_UdpHelper_t, stringdata0) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_UdpHelper_t qt_meta_stringdata_UdpHelper = {
+    {
+QT_MOC_LITERAL(0, 0, 9) // "UdpHelper"
+
+    },
+    "UdpHelper"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_UdpHelper[] = {
+
+ // content:
+       8,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       0,    0, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+       0        // eod
+};
+
+void UdpHelper::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    Q_UNUSED(_o);
+    Q_UNUSED(_id);
+    Q_UNUSED(_c);
+    Q_UNUSED(_a);
+}
+
+QT_INIT_METAOBJECT const QMetaObject UdpHelper::staticMetaObject = { {
+    &QObject::staticMetaObject,
+    qt_meta_stringdata_UdpHelper.data,
+    qt_meta_data_UdpHelper,
+    qt_static_metacall,
+    nullptr,
+    nullptr
+} };
+
+
+const QMetaObject *UdpHelper::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *UdpHelper::qt_metacast(const char *_clname)
+{
+    if (!_clname) return nullptr;
+    if (!strcmp(_clname, qt_meta_stringdata_UdpHelper.stringdata0))
+        return static_cast<void*>(this);
+    return QObject::qt_metacast(_clname);
+}
+
+int UdpHelper::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QObject::qt_metacall(_c, _id, _a);
+    return _id;
+}
+QT_WARNING_POP
+QT_END_MOC_NAMESPACE

+ 94 - 0
Qt/Qt_Test_242/moc_volviewform.cpp

@@ -0,0 +1,94 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'volviewform.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.5)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "volviewform.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'volviewform.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.12.5. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+struct qt_meta_stringdata_VolViewForm_t {
+    QByteArrayData data[1];
+    char stringdata0[12];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_VolViewForm_t, stringdata0) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_VolViewForm_t qt_meta_stringdata_VolViewForm = {
+    {
+QT_MOC_LITERAL(0, 0, 11) // "VolViewForm"
+
+    },
+    "VolViewForm"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_VolViewForm[] = {
+
+ // content:
+       8,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       0,    0, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+       0        // eod
+};
+
+void VolViewForm::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    Q_UNUSED(_o);
+    Q_UNUSED(_id);
+    Q_UNUSED(_c);
+    Q_UNUSED(_a);
+}
+
+QT_INIT_METAOBJECT const QMetaObject VolViewForm::staticMetaObject = { {
+    &QWidget::staticMetaObject,
+    qt_meta_stringdata_VolViewForm.data,
+    qt_meta_data_VolViewForm,
+    qt_static_metacall,
+    nullptr,
+    nullptr
+} };
+
+
+const QMetaObject *VolViewForm::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *VolViewForm::qt_metacast(const char *_clname)
+{
+    if (!_clname) return nullptr;
+    if (!strcmp(_clname, qt_meta_stringdata_VolViewForm.stringdata0))
+        return static_cast<void*>(this);
+    return QWidget::qt_metacast(_clname);
+}
+
+int VolViewForm::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QWidget::qt_metacall(_c, _id, _a);
+    return _id;
+}
+QT_WARNING_POP
+QT_END_MOC_NAMESPACE

+ 118 - 0
Qt/Qt_Test_242/moc_widget.cpp

@@ -0,0 +1,118 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'widget.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.5)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "widget.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'widget.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.12.5. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+struct qt_meta_stringdata_Widget_t {
+    QByteArrayData data[3];
+    char stringdata0[22];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_Widget_t, stringdata0) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_Widget_t qt_meta_stringdata_Widget = {
+    {
+QT_MOC_LITERAL(0, 0, 6), // "Widget"
+QT_MOC_LITERAL(1, 7, 13), // "slot_TimerRun"
+QT_MOC_LITERAL(2, 21, 0) // ""
+
+    },
+    "Widget\0slot_TimerRun\0"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_Widget[] = {
+
+ // content:
+       8,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       1,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    0,   19,    2, 0x08 /* Private */,
+
+ // slots: parameters
+    QMetaType::Void,
+
+       0        // eod
+};
+
+void Widget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        auto *_t = static_cast<Widget *>(_o);
+        Q_UNUSED(_t)
+        switch (_id) {
+        case 0: _t->slot_TimerRun(); break;
+        default: ;
+        }
+    }
+    Q_UNUSED(_a);
+}
+
+QT_INIT_METAOBJECT const QMetaObject Widget::staticMetaObject = { {
+    &QWidget::staticMetaObject,
+    qt_meta_stringdata_Widget.data,
+    qt_meta_data_Widget,
+    qt_static_metacall,
+    nullptr,
+    nullptr
+} };
+
+
+const QMetaObject *Widget::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *Widget::qt_metacast(const char *_clname)
+{
+    if (!_clname) return nullptr;
+    if (!strcmp(_clname, qt_meta_stringdata_Widget.stringdata0))
+        return static_cast<void*>(this);
+    return QWidget::qt_metacast(_clname);
+}
+
+int Widget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QWidget::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 1)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 1;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 1)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 1;
+    }
+    return _id;
+}
+QT_WARNING_POP
+QT_END_MOC_NAMESPACE

+ 507 - 0
Qt/Qt_Test_242/pdu_ctrl.cpp

@@ -0,0 +1,507 @@
+#include "pdu_ctrl.h"
+#include <QtWidgets/QStackedWidget>
+#include <QSettings>
+#include <QProcess>
+#include <QCoreApplication>
+#include <QSql>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+#include <QSqlError>
+#define READ_INI_STR(key, default_value) (settings.contains(key) ? settings.value(key).toString() : default_value)
+#define READ_INI_INT(key, default_value) (settings.contains(key) ? settings.value(key).toInt() : default_value)
+
+pdu_Ctrl* pdu_Ctrl::m_instance = nullptr;
+QMutex pdu_Ctrl::mutex;
+
+pdu_Ctrl::pdu_Ctrl(QObject *parent) : QObject(parent)
+{
+    m_nModbusSelect=0;
+    m_nModbusAddress=0;//从机地址
+    m_nModbusMSType=1;//主从
+    m_nSaveData=0;
+    nViewShowType=widgetType_Main;
+    nSettingType=0;
+    nChidIndex=0;
+    nChidPHIndex=0;
+    m_nAngle=0;
+    isT_ACType=0;
+    memset(nButtonStatus,0,sizeof(nButtonStatus));
+    //
+}
+
+void pdu_Ctrl::slot_setAngel(int nAngle)
+{
+    if(m_pAngleCtrl&&m_pWidget)
+    {
+        //m_pAngleCtrl->setPos(size().width()/2, size().height()/2);
+        //m_pAngleCtrl->transform(width() / 2, height() / 2);
+        m_pAngleCtrl->setRotation(nAngle);
+        m_nAngle=nAngle;
+        if(nAngle==0||nAngle==180)
+        {
+            m_pWidget->resize(m_nWidth, m_nHeight);
+            if(nAngle==0)
+            {
+                m_pAngleCtrl->setPos(0,0);
+            }else
+            {
+                m_pAngleCtrl->setPos(m_pWidget->size().width(),m_pWidget->size().height());
+            }
+            //QRect pRect=size();
+            qDebug()<<"x:"<<m_pWidget->geometry().x()<<"y:"<<m_pWidget->geometry().y()<<"Width:"<<m_pWidget->size().width()<<"Height:"<<m_pWidget->size().height();
+        }else
+        {
+            m_pWidget->resize(m_nHeight,m_nWidth);
+            if(nAngle==90)
+            {
+                m_pAngleCtrl->setPos(m_nWidth,0);
+
+            }else
+            {
+                m_pAngleCtrl->setPos(0,m_nHeight);
+            }
+            qDebug()<<"x:"<<m_pWidget->geometry().x()<<"y:"<<m_pWidget->geometry().y()<<"Width:"<<m_pWidget->size().width()<<"Height:"<<m_pWidget->size().height();
+        }
+        m_pView->update();
+    }
+}
+
+void pdu_Ctrl::slot_ClickBtn(int nButton)
+{
+    ButtonDown(nButton,BtnDown_C);
+}
+
+void pdu_Ctrl::slot_DClickBtn(int nButton)
+{
+    ButtonDown(nButton,BtnDown_C);
+}
+
+void pdu_Ctrl::slot_LClickBtn(int nButton)
+{
+    ButtonDown(nButton,BtnDown_L);
+}
+
+void pdu_Ctrl::slot_BtnClear(int nButton)
+{
+    ButtonDown(nButton,BtnDown_Null);
+}
+
+void pdu_Ctrl::InitData(Widget *pWidget, QGraphicsProxyWidget *pProxy, QGraphicsView *pView,int nWidth, int nHeight)
+{
+    m_pAngleCtrl=pProxy;
+    m_pView=pView;
+    m_pWidget=pWidget;
+    m_nWidth= nWidth;
+    m_nHeight = nHeight;
+}
+
+void pdu_Ctrl::ReadModbusInit()
+{
+    QSettings settings("./AppConfig.ini",QSettings::IniFormat);
+    m_nModbusAddress=READ_INI_INT("MODBUS/address",0);
+    if(m_nModbusAddress>255||m_nModbusAddress<0)
+    {
+        m_nModbusAddress=0;
+    }
+    m_nModbusMSType=READ_INI_INT("MODBUS/MSType",1);//0:主机,1:从机
+    qDebug()<<"modbus Config m_nModbusMSType="<<m_nModbusMSType<<" m_nModbusAddress="<<m_nModbusAddress;
+    QSqlDatabase m_db;
+    m_db=QSqlDatabase::addDatabase("QSQLITE");
+    m_db.setDatabaseName(strSqliteAddress);
+    qDebug()<<"modbus DB="<<strSqliteAddress;
+    bool isDBOpen=false;
+    if (m_db.open())
+    {
+        qDebug()<<"SQL Open Success";
+        isDBOpen=true;
+    }else
+    {
+        qDebug()<<"SQL Open Error";
+        isDBOpen=false;
+    }
+    if(isDBOpen)
+    {
+        QSqlQuery sql_query(m_db);
+        QString strSql=QString("SELECT *  FROM Table_DeviceInfo where product_id==1;");
+        //qDebug()<<strSql;
+        if (sql_query.exec(strSql))
+        {
+            while (sql_query.next())
+            {
+                m_nModbusAddress = sql_query.value("product_modbus_addr").toInt();
+            }
+        }else
+        {
+            qDebug()<<sql_query.lastError().text();
+        }
+    }
+    m_db.close();
+    qDebug()<<"modbus m_nModbusMSType="<<m_nModbusMSType<<" m_nModbusAddress="<<m_nModbusAddress;
+}
+
+void pdu_Ctrl::SaveModbusInit()
+{
+    QSettings settings("./AppConfig.ini",QSettings::IniFormat);
+    settings.setValue("MODBUS/address",m_nModbusAddress);
+    settings.setValue("MODBUS/MSType",m_nModbusMSType);//0:主机,1:从机
+    QSqlDatabase m_db;
+    m_db=QSqlDatabase::addDatabase("QSQLITE");
+    m_db.setDatabaseName(strSqliteAddress);
+    qDebug()<<strSqliteAddress;
+    bool isDBOpen=false;
+    if (m_db.open())
+    {
+        qDebug()<<"SQL Open Success";
+        isDBOpen=true;
+    }else
+    {
+        qDebug()<<"SQL Open Error";
+        isDBOpen=false;
+    }
+    if(isDBOpen)
+    {
+        QSqlQuery sql_query(m_db);
+        QString strSql=QString("UPDATE Table_DeviceInfo SET product_modbus_addr = %1 WHERE product_id==1").arg(m_nModbusAddress);
+        //qDebug()<<strSql;
+        if (!sql_query.exec(strSql))
+        {
+            qDebug()<<sql_query.lastError().text();
+        }
+    }
+    m_db.close();
+
+
+}
+
+void pdu_Ctrl::Main_UPBtnSet(BtnDownType nbtnType)
+{
+    qDebug()<<"Main_UPBtnSet";
+    if(!m_pWidget)
+    {
+        return;
+    }
+    if(nbtnType==BtnDown_C)
+    {
+        qDebug()<<"pageUp";
+        m_pWidget->pageUp();
+    }
+
+}
+
+void pdu_Ctrl::Main_FunBtnSet(BtnDownType nbtnType)
+{
+    //中间按钮
+    qDebug()<<"Main_FunBtnSet";
+    if (nbtnType==BtnDown_C)
+    {
+        //在通道界面是显示三项通道
+        if(m_pWidget)
+        {
+            int nNowIndex=m_pWidget->getShowPagIndex();
+            qDebug()<<"NowIndex="<<nNowIndex;
+            switch (nNowIndex) {
+            case 1:
+            case 2://CH通道界面如果是三项则切换至三项子通道界面
+                {
+                    if(isT_ACType==1)
+                    {
+                        lastACIndex=nNowIndex;
+                        m_pWidget->setShowPHIndex(1);
+                        ChangeView(widgetType_Main,4);
+                    }
+                }
+                break;
+            case 4://PH通道界面返回CH通道界面
+                {
+                    m_pWidget->setShowPHIndex(0);
+                    ChangeView(widgetType_Main,lastACIndex);
+                }
+                break;
+            default://其他界面
+                //在显示主界面时是旋转窗口
+                m_nAngle+=90;
+                m_nAngle==360?m_nAngle=0:m_nAngle;
+                qDebug()<<"nAngle:"<<m_nAngle;
+                slot_setAngel(m_nAngle);
+                qDebug()<<"slot_setAngel";
+                break;
+            }
+        }
+
+    }
+    else
+    {
+        qDebug()<<"setSelectStatus";
+        if(m_pWidget)
+        {
+            m_nModbusSelect=0;
+            m_pWidget->CtrlBtnSet(0,m_nModbusAddress);
+            m_pWidget->setSelectStatus(m_nModbusSelect);
+            m_nSaveData=0;
+        }
+        //切换到modbus
+        qDebug()<<"ChangeView";
+        //nViewShowType=widgetType_Setting;
+        ChangeView(widgetType_Setting,0);
+    }
+
+}
+
+void pdu_Ctrl::Main_DownBtnSet(BtnDownType nbtnType)
+{
+    qDebug()<<"Main_DownBtnSet";
+    if(!m_pWidget)
+    {
+        return;
+    }
+    if(nbtnType==BtnDown_C)
+    {
+        m_pWidget->pageDown();
+        qDebug()<<"pageDown";
+    }
+
+}
+
+void pdu_Ctrl::Setting_UPBtnSet(BtnDownType nbtnType)
+{
+    switch (nSettingType) {
+    case settingMode_Modbus:
+    {
+        if(nbtnType==BtnDown_C)
+        {//切换select
+            if(m_pWidget)
+            {
+                switch (m_nModbusSelect) {
+                case 0://address
+                {
+                    m_nModbusAddress+=1;
+                    if(m_nModbusAddress>32)m_nModbusAddress=1;
+                    m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress);
+                }break;
+                case 1://SAVE
+                {
+                    //保存切换
+                    m_nSaveData==0?m_nSaveData=1:m_nSaveData=0;
+                    m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nSaveData);
+                }break;
+                case 2://主从
+                {
+                    //主从切换
+                    m_nModbusMSType==0?m_nModbusMSType=1:m_nModbusMSType=0;
+                    m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusMSType);
+                }break;
+                }
+            }
+        }else if(nbtnType==BtnDown_L)
+        {
+            switch (m_nModbusSelect) {
+            case 0://address
+            {
+                m_nModbusAddress+=5;
+                if(m_nModbusAddress>255)m_nModbusAddress=0;
+                if(m_pWidget)m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress);
+            }break;
+            }
+        }
+    }break;
+    case settingMode_IP:
+    {
+
+    }break;
+    default:
+        break;
+    }
+}
+
+void pdu_Ctrl::Setting_FunBtnSet(BtnDownType nbtnType)
+{
+    switch (nSettingType) {
+    case settingMode_Modbus:
+    {
+        if(nbtnType==BtnDown_C)
+        {//切换select
+            if(m_pWidget)
+            {
+                if(m_nModbusSelect==1&&m_nSaveData==1)//短按 FUN 保存YES回到前台。
+                {
+                    SaveModbusInit();
+                    ChangeView(widgetType_Main,0);
+                }else
+                {
+#ifdef RS485Type
+                    m_nModbusSelect==0?m_nModbusSelect=1:m_nModbusSelect=0;
+#endif
+                    m_pWidget->setSelectStatus(m_nModbusSelect);
+                }
+
+            }
+        }else if(nbtnType==BtnDown_L)
+        {
+            ChangeView(widgetType_Main,0);
+        }
+    }break;
+    case settingMode_IP:
+    {
+
+    }break;
+    default:
+        break;
+    }
+}
+
+void pdu_Ctrl::Setting_DownBtnSet(BtnDownType nbtnType)
+{
+    switch (nSettingType) {
+    case settingMode_Modbus:
+    {
+        if(nbtnType==BtnDown_C)
+        {//切换select
+            if(m_pWidget)
+            {
+                switch (m_nModbusSelect) {
+                case 0://address
+                {
+                    m_nModbusAddress-=1;
+                    if(m_nModbusAddress<1)m_nModbusAddress=32;
+                    m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress);
+                }break;
+                case 1://SAVE
+                {
+                    //保存切换
+                    m_nSaveData==0?m_nSaveData=1:m_nSaveData=0;
+                    m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nSaveData);
+                }break;
+                case 2://主从
+                {
+                    //主从切换
+                    m_nModbusMSType==0?m_nModbusMSType=1:m_nModbusMSType=0;
+                    m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusMSType);
+                }break;
+                }
+            }
+        }else if(nbtnType==BtnDown_L)
+        {
+            switch (m_nModbusSelect) {
+            case 0://address
+            {
+                m_nModbusAddress-=5;
+                if(m_nModbusAddress<0)m_nModbusAddress=255;
+                if(m_pWidget)m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress);
+            }break;
+            }
+        }
+    }break;
+    case settingMode_IP:
+    {
+
+    }break;
+    default:
+        break;
+    }
+}
+
+void pdu_Ctrl::ChangeView(WidgetType widgetType, int nIndex)
+{
+    if(!m_pWidget)
+    {
+        return;
+    }
+    if(widgetType!=nViewShowType)
+    {
+        qDebug()<<"Widget->ChangeView";
+        m_pWidget->ChangeView(widgetType,0);
+        nViewShowType=widgetType;
+    }else
+    {
+        m_pWidget->ChangeView(widgetType,nIndex);
+    }
+
+}
+
+void pdu_Ctrl::ResetAll()
+{
+#ifdef RS485IpType
+    system("sh /mnt/UDISK/app/recovery.sh");
+#else
+    system("sh /opt/recovery.sh");
+#endif
+}
+
+void pdu_Ctrl::RestartSys()
+{
+    system("reboot");
+}
+
+void pdu_Ctrl::ButtonDown(int nButtonID, BtnDownType nDownType)
+{
+    //规整按钮状态
+    switch (nButtonID) {
+        case GPIO_KEY1://1按钮
+            nButtonStatus[0]=nDownType;
+            break;
+        case GPIO_KEY2:
+            nButtonStatus[1]=nDownType;
+            break;
+        case GPIO_KEY3://3按钮
+             nButtonStatus[2]=nDownType;
+            break;
+        default:
+            break;
+    }
+    qDebug()<<"Key1="<<GPIO_KEY1<<" Type1="<<nButtonStatus[0];
+    qDebug()<<"Key2="<<GPIO_KEY2<<" Type2="<<nButtonStatus[1];
+    qDebug()<<"Key3="<<GPIO_KEY3<<" Type3="<<nButtonStatus[2];
+    qDebug()<<"widgetType="<<nViewShowType;
+    if(nDownType<0)
+    {
+        return;
+    }
+    //判断多键控制
+    if(nButtonStatus[0]==2&&nButtonStatus[2]==2)
+    {//恢复出厂设置
+        ResetAll();
+        return;
+    }
+    if(nButtonStatus[0]==2&&nButtonStatus[1]==2)
+    {//重新启动
+        RestartSys();
+        return;
+    }
+
+    if(nViewShowType==widgetType_Main)
+    {
+        qDebug()<<"widgetType="<<widgetType_Main;
+        qDebug()<<"nButtonID="<<nButtonID;
+        switch (nButtonID) {
+        case GPIO_KEY1://1按钮
+            Main_UPBtnSet(nDownType);
+            break;
+        case GPIO_KEY2:
+            Main_FunBtnSet(nDownType);
+            break;
+        case GPIO_KEY3://3按钮
+            Main_DownBtnSet(nDownType);
+            break;
+        default:
+            break;
+        }
+
+    }else if(nViewShowType==widgetType_Setting)
+    {
+        qDebug()<<"widgetType="<<widgetType_Setting;
+        qDebug()<<"nButtonID="<<nButtonID;
+        switch (nButtonID) {
+        case GPIO_KEY1://1按钮
+            Setting_UPBtnSet(nDownType);
+            break;
+        case GPIO_KEY2:
+            Setting_FunBtnSet(nDownType);
+            break;
+        case GPIO_KEY3://3按钮
+            Setting_DownBtnSet(nDownType);
+            break;
+        default:
+            break;
+        }
+    }
+}

+ 148 - 0
Qt/Qt_Test_242/pdu_ctrl.h

@@ -0,0 +1,148 @@
+#ifndef PDU_CTRL_H
+#define PDU_CTRL_H
+
+#include <QObject>
+#include <QMutex>
+#include <QGraphicsProxyWidget>
+#include <QGraphicsView>
+#include "widget.h"
+#define hightSmartPDU
+//#define RS485Type
+//#define RS485IpType
+enum WidgetType
+{
+    widgetType_Main=0,      //轮询页面
+    widgetType_Setting=1,   //设置页面
+};
+enum WidgetMain_T_AC
+{
+    WidgetMain_CH=0,    //三项总
+    WidgetMain_PHA=1,   //A相
+    WidgetMain_PHB=2,   //B相
+    WidgetMain_PHC=3,   //C相
+};
+enum SettingMode
+{
+    settingMode_Modbus=0,
+    settingMode_LimitV=1,
+    settingMode_LimitA=2,
+    settingMode_IP=3,
+};
+enum BtnDownType
+{
+    BtnDown_C=0,//点击
+    BtnDown_D=1,  //双击
+    BtnDown_L=2,   //长按
+    BtnDown_Null=-1//清空
+};
+
+enum GPIOLED
+{
+    GPIO_LED0=106,
+    GPIO_LED1=105,
+#ifdef RS485Type
+    GPIO_KEY1=160,
+    GPIO_KEY2=161,
+    GPIO_KEY3=162,
+    GPIO_KEY4=103,
+#endif
+#ifdef hightSmartPDU
+    GPIO_KEY1=102,
+    GPIO_KEY2=101,
+    GPIO_KEY3=104,
+    GPIO_KEY4=103,
+
+    GPIO_X=113,//方向传感器
+    GPIO_Y=115//方向传感器
+#endif
+};
+class pdu_Ctrl : public QObject
+{
+    Q_OBJECT
+public:
+    //单例初始化
+    static pdu_Ctrl* instance() {
+        QMutexLocker locker(&mutex);
+        if (!m_instance) {
+            static QMutex mutex;
+            if (!m_instance) {
+                m_instance = new pdu_Ctrl();
+            }
+        }
+        return m_instance;
+    }
+    static void distory()
+    {
+        QMutexLocker locker(&mutex);
+        if (m_instance) {
+            delete m_instance;
+            m_instance = nullptr;
+        }
+    }
+
+    void InitData(Widget* pWidget,QGraphicsProxyWidget* pProxy ,QGraphicsView* pView,int nWidth, int nHeight);
+
+    void ReadModbusInit();
+
+    void SaveModbusInit();
+private:
+    //处理多个点
+    void ButtonDown(int nButtonID, BtnDownType nDownType);
+
+    //===================MAIN界面下按钮控制============================
+    void Main_UPBtnSet(BtnDownType nbtnType);
+    void Main_FunBtnSet(BtnDownType nbtnType);
+    void Main_DownBtnSet(BtnDownType nbtnType);
+    //===================SETTING界面下按钮控制=========================
+    void Setting_UPBtnSet(BtnDownType nbtnType);
+    void Setting_FunBtnSet(BtnDownType nbtnType);
+    void Setting_DownBtnSet(BtnDownType nbtnType);
+    //======切换视图=========
+    void ChangeView(WidgetType widgetType,int nIndex);
+
+    //======恢复出厂设置=========
+    void ResetAll();
+    void RestartSys();
+signals:
+
+public slots:
+    void slot_setAngel(int nAngle);
+    void slot_ClickBtn(int nButton);
+    void slot_DClickBtn(int nButton);
+    void slot_LClickBtn(int nButton);
+    void slot_BtnClear(int nButton);
+private:
+    //单例数据
+    explicit pdu_Ctrl(QObject *parent = nullptr);
+    static pdu_Ctrl* m_instance;
+    static QMutex mutex;
+
+    WidgetType nViewShowType;//
+    int nSettingType;//设置页面
+    //记录三个按钮的状态
+    int nButtonStatus[3];//上中下
+    //当前显示页面ID
+    int nChidIndex;
+    int nChidPHIndex;
+    int m_nAngle;
+    //其他界面指针
+    QGraphicsProxyWidget* m_pAngleCtrl;
+    QGraphicsView* m_pView;
+    Widget* m_pWidget;
+    int m_nWidth;
+    int m_nHeight;
+
+
+    //modbus设置
+public:
+    int m_nModbusSelect;
+    int m_nModbusAddress;//从机地址
+    int m_nModbusMSType;//主从
+    int m_nSaveData;
+    QString strSqliteAddress;
+
+    int isT_ACType;
+    int lastACIndex;
+};
+
+#endif // PDU_CTRL_H

+ 64 - 0
Qt/Qt_Test_242/udphelper.cpp

@@ -0,0 +1,64 @@
+#include "udphelper.h"
+
+#define _GET_DEVICE_TYPE_AND_CHANNEL    0x00
+#define _GET_DEVICE_POWER_INFO          0x01
+#define _GLOBAL_REMOTE_PORT    32768
+UdpHelper::UdpHelper(QObject *parent) : QObject(parent)
+{
+    mSocket = new QUdpSocket(this);
+    mSocket->bind(QHostAddress::Any,this->port);
+}
+
+int UdpHelper::getDeviceTypeAndChannel(int *type, int *channel)
+{
+    //bool status = false ;
+    QByteArray dataArray;
+    dataArray.resize(6);
+    dataArray[0] = 0x55;
+    dataArray[1] = 0x00;
+    dataArray[2] = 0x02;
+    dataArray[3] = _GET_DEVICE_TYPE_AND_CHANNEL;
+    dataArray[4] = 0x00 ;
+    dataArray[5] = 0xFF ;
+    mSocket->writeDatagram(dataArray,QHostAddress::Broadcast,_GLOBAL_REMOTE_PORT);
+    if(mSocket->waitForReadyRead(1000)==false)
+        return -1 ;
+    //recv
+    QByteArray arr;
+    arr.resize(mSocket->bytesAvailable());
+    mSocket->readDatagram(arr.data(),arr.size(),&addr,&port);
+
+    *type = (int)arr.at(0);
+    *channel = (arr.at(1)<<8|arr.at(2));
+
+    return 0;
+}
+
+int UdpHelper::getPowerInfo(bool *sts, float *vol, float *cur, float *power, float *factor, float *consum)
+{
+    //bool status = false ;
+    QByteArray dataArray;
+    dataArray.resize(6);
+    dataArray[0] = 0x55;
+    dataArray[1] = 0x00;
+    dataArray[2] = 0x02;
+    dataArray[3] = _GET_DEVICE_POWER_INFO;
+    dataArray[4] = 0x00 ;
+    dataArray[5] = 0xFF ;
+    mSocket->writeDatagram(dataArray,QHostAddress::Broadcast,_GLOBAL_REMOTE_PORT);
+    if(mSocket->waitForReadyRead(1000)==false)
+        return -1 ;
+    QByteArray arr;
+    char* data_buff;
+    arr.resize(mSocket->bytesAvailable());
+    mSocket->readDatagram(arr.data(),arr.size(),&addr,&port);
+    data_buff = arr.data();
+    *sts = data_buff[0];
+    memcpy(vol,data_buff+1,4);
+    memcpy(cur,data_buff+5,4);
+    memcpy(power,data_buff+9,4);
+    memcpy(factor,data_buff+13,4);
+    memcpy(consum,data_buff+17,4);
+    return 0;
+}
+

+ 23 - 0
Qt/Qt_Test_242/udphelper.h

@@ -0,0 +1,23 @@
+#ifndef UDPHELPER_H
+#define UDPHELPER_H
+
+#include <QObject>
+#include <QtNetwork/QUdpSocket>
+class UdpHelper : public QObject
+{
+    Q_OBJECT
+public:
+    explicit UdpHelper(QObject *parent = nullptr);
+    int getDeviceTypeAndChannel(int* type,int* channel);
+    int getPowerInfo(bool* sts,float* vol,float* cur,float* power,float* factor,float* consum);
+signals:
+
+public slots:
+
+private:
+    QUdpSocket *mSocket;
+    QHostAddress addr;
+    quint16 port;
+};
+
+#endif // _H

+ 117 - 0
Qt/Qt_Test_242/ui_volviewform.h

@@ -0,0 +1,117 @@
+/********************************************************************************
+** Form generated from reading UI file 'volviewform.ui'
+**
+** Created by: Qt User Interface Compiler version 5.12.5
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_VOLVIEWFORM_H
+#define UI_VOLVIEWFORM_H
+
+#include <QtCore/QVariant>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QFrame>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_VolViewForm
+{
+public:
+    QFrame *frame_2;
+    QLabel *label_6;
+    QLabel *label_7;
+    QLabel *label_8;
+    QLabel *label_9;
+    QLabel *label_10;
+    QLabel *label_11;
+    QLabel *label_12;
+    QLabel *label_13;
+    QLabel *label_14;
+    QLabel *label_15;
+    QLabel *label_16;
+
+    void setupUi(QWidget *VolViewForm)
+    {
+        if (VolViewForm->objectName().isEmpty())
+            VolViewForm->setObjectName(QString::fromUtf8("VolViewForm"));
+        VolViewForm->resize(160, 128);
+        VolViewForm->setStyleSheet(QString::fromUtf8("QFrame\n"
+"{\n"
+"	background-color: rgb(85, 87, 83);\n"
+"}\n"
+"QLabel\n"
+"{\n"
+"	color: rgb(115, 210, 22);\n"
+"}"));
+        frame_2 = new QFrame(VolViewForm);
+        frame_2->setObjectName(QString::fromUtf8("frame_2"));
+        frame_2->setGeometry(QRect(0, 0, 160, 131));
+        frame_2->setFrameShape(QFrame::StyledPanel);
+        frame_2->setFrameShadow(QFrame::Raised);
+        label_6 = new QLabel(frame_2);
+        label_6->setObjectName(QString::fromUtf8("label_6"));
+        label_6->setGeometry(QRect(10, 0, 131, 21));
+        label_7 = new QLabel(frame_2);
+        label_7->setObjectName(QString::fromUtf8("label_7"));
+        label_7->setGeometry(QRect(10, 21, 85, 17));
+        label_8 = new QLabel(frame_2);
+        label_8->setObjectName(QString::fromUtf8("label_8"));
+        label_8->setGeometry(QRect(103, 21, 47, 17));
+        label_9 = new QLabel(frame_2);
+        label_9->setObjectName(QString::fromUtf8("label_9"));
+        label_9->setGeometry(QRect(11, 45, 85, 16));
+        label_10 = new QLabel(frame_2);
+        label_10->setObjectName(QString::fromUtf8("label_10"));
+        label_10->setGeometry(QRect(11, 68, 85, 16));
+        label_11 = new QLabel(frame_2);
+        label_11->setObjectName(QString::fromUtf8("label_11"));
+        label_11->setGeometry(QRect(11, 91, 85, 16));
+        label_12 = new QLabel(frame_2);
+        label_12->setObjectName(QString::fromUtf8("label_12"));
+        label_12->setGeometry(QRect(11, 114, 85, 16));
+        label_13 = new QLabel(frame_2);
+        label_13->setObjectName(QString::fromUtf8("label_13"));
+        label_13->setGeometry(QRect(103, 45, 47, 16));
+        label_14 = new QLabel(frame_2);
+        label_14->setObjectName(QString::fromUtf8("label_14"));
+        label_14->setGeometry(QRect(103, 114, 47, 16));
+        label_15 = new QLabel(frame_2);
+        label_15->setObjectName(QString::fromUtf8("label_15"));
+        label_15->setGeometry(QRect(103, 91, 47, 16));
+        label_16 = new QLabel(frame_2);
+        label_16->setObjectName(QString::fromUtf8("label_16"));
+        label_16->setGeometry(QRect(103, 68, 47, 16));
+
+        retranslateUi(VolViewForm);
+
+        QMetaObject::connectSlotsByName(VolViewForm);
+    } // setupUi
+
+    void retranslateUi(QWidget *VolViewForm)
+    {
+        VolViewForm->setWindowTitle(QApplication::translate("VolViewForm", "Form", nullptr));
+        label_6->setText(QApplication::translate("VolViewForm", "Input Vol", nullptr));
+        label_7->setText(QApplication::translate("VolViewForm", "Volt(V):", nullptr));
+        label_8->setText(QApplication::translate("VolViewForm", "0", nullptr));
+        label_9->setText(QApplication::translate("VolViewForm", "Cur(A):", nullptr));
+        label_10->setText(QApplication::translate("VolViewForm", "Power(W):", nullptr));
+        label_11->setText(QApplication::translate("VolViewForm", "Factor:", nullptr));
+        label_12->setText(QApplication::translate("VolViewForm", "Sum(Kw):", nullptr));
+        label_13->setText(QApplication::translate("VolViewForm", "0.0", nullptr));
+        label_14->setText(QApplication::translate("VolViewForm", "0", nullptr));
+        label_15->setText(QApplication::translate("VolViewForm", "0%", nullptr));
+        label_16->setText(QApplication::translate("VolViewForm", "0.0", nullptr));
+    } // retranslateUi
+
+};
+
+namespace Ui {
+    class VolViewForm: public Ui_VolViewForm {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_VOLVIEWFORM_H

+ 721 - 0
Qt/Qt_Test_242/ui_widget.h

@@ -0,0 +1,721 @@
+/********************************************************************************
+** Form generated from reading UI file 'widget.ui'
+**
+** Created by: Qt User Interface Compiler version 5.12.5
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_WIDGET_H
+#define UI_WIDGET_H
+
+#include <QtCore/QVariant>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QFrame>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QStackedWidget>
+#include <QtWidgets/QVBoxLayout>
+#include <QtWidgets/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_Widget
+{
+public:
+    QVBoxLayout *verticalLayout;
+    QStackedWidget *stackedWidget;
+    QWidget *page_main;
+    QVBoxLayout *verticalLayout_3;
+    QFrame *frame;
+    QVBoxLayout *verticalLayout_4;
+    QStackedWidget *stackedWidget_Main;
+    QWidget *page_4;
+    QGridLayout *gridLayout_8;
+    QLabel *label;
+    QLabel *label_modbus_type;
+    QLabel *label_3;
+    QLabel *label_5;
+    QLabel *label_4;
+    QLabel *label_2;
+    QLabel *label_modbus_Addr;
+    QWidget *page_5;
+    QGridLayout *gridLayout_3;
+    QLabel *label_16;
+    QLabel *label_12;
+    QLabel *label_8;
+    QLabel *label_10;
+    QLabel *label_7;
+    QLabel *label_15;
+    QLabel *label_11;
+    QLabel *label_9;
+    QLabel *label_13;
+    QLabel *label_14;
+    QLabel *label_6;
+    QWidget *page;
+    QGridLayout *gridLayout_4;
+    QLabel *label_39;
+    QLabel *label_S;
+    QLabel *label_A;
+    QLabel *label_37;
+    QLabel *label_W;
+    QLabel *label_34;
+    QLabel *label_V;
+    QLabel *label_36;
+    QLabel *label_38;
+    QLabel *label_F;
+    QLabel *label_chName;
+    QWidget *page_7;
+    QGridLayout *gridLayout_6;
+    QLabel *label_chName_4;
+    QLabel *label_43;
+    QLabel *label_Temp;
+    QLabel *label_44;
+    QLabel *label_Humidity;
+    QWidget *page_8;
+    QGridLayout *gridLayout_7;
+    QLabel *label_24;
+    QLabel *label_phW;
+    QLabel *label_22;
+    QLabel *label_phV;
+    QLabel *label_21;
+    QLabel *label_phKw;
+    QLabel *label_23;
+    QLabel *label_phA;
+    QLabel *label_20;
+    QLabel *label_phF;
+    QLabel *label_18;
+    QWidget *page_Setting;
+    QVBoxLayout *verticalLayout_5;
+    QFrame *frame_2;
+    QVBoxLayout *verticalLayout_7;
+    QStackedWidget *stackedWidget_Setting;
+    QWidget *page_2;
+    QGridLayout *gridLayout_2;
+    QLabel *label_SaveName;
+    QLabel *label_chName_2;
+    QLabel *label_MSName;
+    QLabel *label_addressData;
+    QLabel *label_addressName;
+    QLabel *label_MSData;
+    QLabel *label_SaveData;
+    QWidget *page_6;
+    QGridLayout *gridLayout_5;
+    QLabel *label_chName_3;
+    QLabel *label_42;
+    QLabel *label_V_3;
+    QWidget *page_3;
+    QVBoxLayout *verticalLayout_2;
+    QFrame *frame_5;
+    QGridLayout *gridLayout;
+
+    void setupUi(QWidget *Widget)
+    {
+        if (Widget->objectName().isEmpty())
+            Widget->setObjectName(QString::fromUtf8("Widget"));
+        Widget->resize(128, 64);
+        QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+        sizePolicy.setHorizontalStretch(0);
+        sizePolicy.setVerticalStretch(0);
+        sizePolicy.setHeightForWidth(Widget->sizePolicy().hasHeightForWidth());
+        Widget->setSizePolicy(sizePolicy);
+        Widget->setStyleSheet(QString::fromUtf8("QFrame\n"
+"{\n"
+"	background-color: rgb(0, 0, 0);\n"
+"}\n"
+"QLabel\n"
+"{\n"
+"	color: rgb(255, 255, 255);\n"
+"}"));
+        verticalLayout = new QVBoxLayout(Widget);
+        verticalLayout->setSpacing(0);
+        verticalLayout->setContentsMargins(11, 11, 11, 11);
+        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+        verticalLayout->setContentsMargins(0, 0, 0, 0);
+        stackedWidget = new QStackedWidget(Widget);
+        stackedWidget->setObjectName(QString::fromUtf8("stackedWidget"));
+        QFont font;
+        font.setPointSize(5);
+        stackedWidget->setFont(font);
+        page_main = new QWidget();
+        page_main->setObjectName(QString::fromUtf8("page_main"));
+        verticalLayout_3 = new QVBoxLayout(page_main);
+        verticalLayout_3->setSpacing(0);
+        verticalLayout_3->setContentsMargins(11, 11, 11, 11);
+        verticalLayout_3->setObjectName(QString::fromUtf8("verticalLayout_3"));
+        verticalLayout_3->setContentsMargins(0, 0, 0, 0);
+        frame = new QFrame(page_main);
+        frame->setObjectName(QString::fromUtf8("frame"));
+        frame->setFont(font);
+        frame->setFrameShape(QFrame::StyledPanel);
+        frame->setFrameShadow(QFrame::Raised);
+        verticalLayout_4 = new QVBoxLayout(frame);
+        verticalLayout_4->setSpacing(6);
+        verticalLayout_4->setContentsMargins(11, 11, 11, 11);
+        verticalLayout_4->setObjectName(QString::fromUtf8("verticalLayout_4"));
+        verticalLayout_4->setContentsMargins(0, 0, 0, 0);
+        stackedWidget_Main = new QStackedWidget(frame);
+        stackedWidget_Main->setObjectName(QString::fromUtf8("stackedWidget_Main"));
+        stackedWidget_Main->setFont(font);
+        page_4 = new QWidget();
+        page_4->setObjectName(QString::fromUtf8("page_4"));
+        gridLayout_8 = new QGridLayout(page_4);
+        gridLayout_8->setSpacing(0);
+        gridLayout_8->setContentsMargins(11, 11, 11, 11);
+        gridLayout_8->setObjectName(QString::fromUtf8("gridLayout_8"));
+        gridLayout_8->setContentsMargins(0, 0, 0, 0);
+        label = new QLabel(page_4);
+        label->setObjectName(QString::fromUtf8("label"));
+        QFont font1;
+        font1.setPointSize(7);
+        label->setFont(font1);
+        label->setAlignment(Qt::AlignCenter);
+
+        gridLayout_8->addWidget(label, 0, 0, 1, 2);
+
+        label_modbus_type = new QLabel(page_4);
+        label_modbus_type->setObjectName(QString::fromUtf8("label_modbus_type"));
+        label_modbus_type->setFont(font);
+        label_modbus_type->setWordWrap(true);
+
+        gridLayout_8->addWidget(label_modbus_type, 6, 0, 1, 1);
+
+        label_3 = new QLabel(page_4);
+        label_3->setObjectName(QString::fromUtf8("label_3"));
+        label_3->setFont(font);
+        label_3->setWordWrap(true);
+
+        gridLayout_8->addWidget(label_3, 4, 0, 1, 2);
+
+        label_5 = new QLabel(page_4);
+        label_5->setObjectName(QString::fromUtf8("label_5"));
+        label_5->setFont(font);
+
+        gridLayout_8->addWidget(label_5, 2, 1, 1, 1);
+
+        label_4 = new QLabel(page_4);
+        label_4->setObjectName(QString::fromUtf8("label_4"));
+        label_4->setFont(font);
+
+        gridLayout_8->addWidget(label_4, 2, 0, 1, 1);
+
+        label_2 = new QLabel(page_4);
+        label_2->setObjectName(QString::fromUtf8("label_2"));
+        label_2->setFont(font);
+
+        gridLayout_8->addWidget(label_2, 1, 0, 1, 2);
+
+        label_modbus_Addr = new QLabel(page_4);
+        label_modbus_Addr->setObjectName(QString::fromUtf8("label_modbus_Addr"));
+        label_modbus_Addr->setFont(font);
+        label_modbus_Addr->setWordWrap(true);
+
+        gridLayout_8->addWidget(label_modbus_Addr, 6, 1, 1, 1);
+
+        stackedWidget_Main->addWidget(page_4);
+        page_5 = new QWidget();
+        page_5->setObjectName(QString::fromUtf8("page_5"));
+        page_5->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);"));
+        gridLayout_3 = new QGridLayout(page_5);
+        gridLayout_3->setSpacing(0);
+        gridLayout_3->setContentsMargins(11, 11, 11, 11);
+        gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3"));
+        gridLayout_3->setContentsMargins(0, 0, 0, 0);
+        label_16 = new QLabel(page_5);
+        label_16->setObjectName(QString::fromUtf8("label_16"));
+        label_16->setFont(font);
+
+        gridLayout_3->addWidget(label_16, 3, 1, 1, 1);
+
+        label_12 = new QLabel(page_5);
+        label_12->setObjectName(QString::fromUtf8("label_12"));
+        label_12->setFont(font);
+
+        gridLayout_3->addWidget(label_12, 5, 0, 1, 1);
+
+        label_8 = new QLabel(page_5);
+        label_8->setObjectName(QString::fromUtf8("label_8"));
+        label_8->setFont(font);
+
+        gridLayout_3->addWidget(label_8, 1, 1, 1, 1);
+
+        label_10 = new QLabel(page_5);
+        label_10->setObjectName(QString::fromUtf8("label_10"));
+        label_10->setFont(font);
+
+        gridLayout_3->addWidget(label_10, 3, 0, 1, 1);
+
+        label_7 = new QLabel(page_5);
+        label_7->setObjectName(QString::fromUtf8("label_7"));
+        label_7->setFont(font);
+
+        gridLayout_3->addWidget(label_7, 1, 0, 1, 1);
+
+        label_15 = new QLabel(page_5);
+        label_15->setObjectName(QString::fromUtf8("label_15"));
+        label_15->setFont(font);
+
+        gridLayout_3->addWidget(label_15, 3, 3, 1, 1);
+
+        label_11 = new QLabel(page_5);
+        label_11->setObjectName(QString::fromUtf8("label_11"));
+        label_11->setFont(font);
+
+        gridLayout_3->addWidget(label_11, 3, 2, 1, 1);
+
+        label_9 = new QLabel(page_5);
+        label_9->setObjectName(QString::fromUtf8("label_9"));
+        label_9->setFont(font);
+
+        gridLayout_3->addWidget(label_9, 1, 2, 1, 1);
+
+        label_13 = new QLabel(page_5);
+        label_13->setObjectName(QString::fromUtf8("label_13"));
+        label_13->setFont(font);
+
+        gridLayout_3->addWidget(label_13, 1, 3, 1, 1);
+
+        label_14 = new QLabel(page_5);
+        label_14->setObjectName(QString::fromUtf8("label_14"));
+        label_14->setFont(font);
+
+        gridLayout_3->addWidget(label_14, 5, 1, 1, 1);
+
+        label_6 = new QLabel(page_5);
+        label_6->setObjectName(QString::fromUtf8("label_6"));
+        label_6->setFont(font1);
+        label_6->setAlignment(Qt::AlignCenter);
+
+        gridLayout_3->addWidget(label_6, 0, 0, 1, 4);
+
+        stackedWidget_Main->addWidget(page_5);
+        page = new QWidget();
+        page->setObjectName(QString::fromUtf8("page"));
+        page->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);"));
+        gridLayout_4 = new QGridLayout(page);
+        gridLayout_4->setSpacing(0);
+        gridLayout_4->setContentsMargins(11, 11, 11, 11);
+        gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4"));
+        gridLayout_4->setContentsMargins(0, 0, 0, 0);
+        label_39 = new QLabel(page);
+        label_39->setObjectName(QString::fromUtf8("label_39"));
+        label_39->setFont(font);
+
+        gridLayout_4->addWidget(label_39, 5, 0, 1, 1);
+
+        label_S = new QLabel(page);
+        label_S->setObjectName(QString::fromUtf8("label_S"));
+        label_S->setFont(font);
+
+        gridLayout_4->addWidget(label_S, 5, 1, 1, 1);
+
+        label_A = new QLabel(page);
+        label_A->setObjectName(QString::fromUtf8("label_A"));
+        label_A->setFont(font);
+
+        gridLayout_4->addWidget(label_A, 1, 3, 1, 1);
+
+        label_37 = new QLabel(page);
+        label_37->setObjectName(QString::fromUtf8("label_37"));
+        label_37->setFont(font);
+
+        gridLayout_4->addWidget(label_37, 3, 0, 1, 1);
+
+        label_W = new QLabel(page);
+        label_W->setObjectName(QString::fromUtf8("label_W"));
+        label_W->setFont(font);
+
+        gridLayout_4->addWidget(label_W, 3, 1, 1, 1);
+
+        label_34 = new QLabel(page);
+        label_34->setObjectName(QString::fromUtf8("label_34"));
+        label_34->setFont(font);
+
+        gridLayout_4->addWidget(label_34, 1, 0, 1, 1);
+
+        label_V = new QLabel(page);
+        label_V->setObjectName(QString::fromUtf8("label_V"));
+        label_V->setFont(font);
+        label_V->setStyleSheet(QString::fromUtf8("QLabel {\n"
+"    color: red;\n"
+"}"));
+
+        gridLayout_4->addWidget(label_V, 1, 1, 1, 1);
+
+        label_36 = new QLabel(page);
+        label_36->setObjectName(QString::fromUtf8("label_36"));
+        label_36->setFont(font);
+
+        gridLayout_4->addWidget(label_36, 1, 2, 1, 1);
+
+        label_38 = new QLabel(page);
+        label_38->setObjectName(QString::fromUtf8("label_38"));
+        label_38->setFont(font);
+
+        gridLayout_4->addWidget(label_38, 3, 2, 1, 1);
+
+        label_F = new QLabel(page);
+        label_F->setObjectName(QString::fromUtf8("label_F"));
+        label_F->setFont(font);
+
+        gridLayout_4->addWidget(label_F, 3, 3, 1, 1);
+
+        label_chName = new QLabel(page);
+        label_chName->setObjectName(QString::fromUtf8("label_chName"));
+        label_chName->setFont(font1);
+        label_chName->setAlignment(Qt::AlignCenter);
+
+        gridLayout_4->addWidget(label_chName, 0, 0, 1, 4);
+
+        stackedWidget_Main->addWidget(page);
+        page_7 = new QWidget();
+        page_7->setObjectName(QString::fromUtf8("page_7"));
+        page_7->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);"));
+        gridLayout_6 = new QGridLayout(page_7);
+        gridLayout_6->setSpacing(0);
+        gridLayout_6->setContentsMargins(11, 11, 11, 11);
+        gridLayout_6->setObjectName(QString::fromUtf8("gridLayout_6"));
+        gridLayout_6->setContentsMargins(15, 0, 15, 0);
+        label_chName_4 = new QLabel(page_7);
+        label_chName_4->setObjectName(QString::fromUtf8("label_chName_4"));
+        label_chName_4->setFont(font1);
+        label_chName_4->setAlignment(Qt::AlignCenter);
+
+        gridLayout_6->addWidget(label_chName_4, 0, 0, 1, 2);
+
+        label_43 = new QLabel(page_7);
+        label_43->setObjectName(QString::fromUtf8("label_43"));
+        label_43->setFont(font);
+
+        gridLayout_6->addWidget(label_43, 1, 0, 1, 1);
+
+        label_Temp = new QLabel(page_7);
+        label_Temp->setObjectName(QString::fromUtf8("label_Temp"));
+        label_Temp->setFont(font);
+        label_Temp->setStyleSheet(QString::fromUtf8(""));
+        label_Temp->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter);
+
+        gridLayout_6->addWidget(label_Temp, 1, 1, 1, 1);
+
+        label_44 = new QLabel(page_7);
+        label_44->setObjectName(QString::fromUtf8("label_44"));
+        label_44->setFont(font);
+
+        gridLayout_6->addWidget(label_44, 2, 0, 1, 1);
+
+        label_Humidity = new QLabel(page_7);
+        label_Humidity->setObjectName(QString::fromUtf8("label_Humidity"));
+        label_Humidity->setFont(font);
+        label_Humidity->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter);
+
+        gridLayout_6->addWidget(label_Humidity, 2, 1, 1, 1);
+
+        stackedWidget_Main->addWidget(page_7);
+        page_8 = new QWidget();
+        page_8->setObjectName(QString::fromUtf8("page_8"));
+        page_8->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);"));
+        gridLayout_7 = new QGridLayout(page_8);
+        gridLayout_7->setSpacing(0);
+        gridLayout_7->setContentsMargins(11, 11, 11, 11);
+        gridLayout_7->setObjectName(QString::fromUtf8("gridLayout_7"));
+        gridLayout_7->setContentsMargins(0, 0, 0, 0);
+        label_24 = new QLabel(page_8);
+        label_24->setObjectName(QString::fromUtf8("label_24"));
+        label_24->setFont(font);
+
+        gridLayout_7->addWidget(label_24, 3, 0, 1, 1);
+
+        label_phW = new QLabel(page_8);
+        label_phW->setObjectName(QString::fromUtf8("label_phW"));
+        label_phW->setFont(font);
+
+        gridLayout_7->addWidget(label_phW, 3, 1, 1, 1);
+
+        label_22 = new QLabel(page_8);
+        label_22->setObjectName(QString::fromUtf8("label_22"));
+        label_22->setFont(font);
+
+        gridLayout_7->addWidget(label_22, 1, 0, 1, 1);
+
+        label_phV = new QLabel(page_8);
+        label_phV->setObjectName(QString::fromUtf8("label_phV"));
+        label_phV->setFont(font);
+
+        gridLayout_7->addWidget(label_phV, 1, 1, 1, 1);
+
+        label_21 = new QLabel(page_8);
+        label_21->setObjectName(QString::fromUtf8("label_21"));
+        label_21->setFont(font);
+
+        gridLayout_7->addWidget(label_21, 5, 0, 1, 1);
+
+        label_phKw = new QLabel(page_8);
+        label_phKw->setObjectName(QString::fromUtf8("label_phKw"));
+        label_phKw->setFont(font);
+
+        gridLayout_7->addWidget(label_phKw, 5, 1, 1, 1);
+
+        label_23 = new QLabel(page_8);
+        label_23->setObjectName(QString::fromUtf8("label_23"));
+        label_23->setFont(font);
+
+        gridLayout_7->addWidget(label_23, 1, 2, 1, 1);
+
+        label_phA = new QLabel(page_8);
+        label_phA->setObjectName(QString::fromUtf8("label_phA"));
+        label_phA->setFont(font);
+
+        gridLayout_7->addWidget(label_phA, 1, 3, 1, 1);
+
+        label_20 = new QLabel(page_8);
+        label_20->setObjectName(QString::fromUtf8("label_20"));
+        label_20->setFont(font);
+
+        gridLayout_7->addWidget(label_20, 3, 2, 1, 1);
+
+        label_phF = new QLabel(page_8);
+        label_phF->setObjectName(QString::fromUtf8("label_phF"));
+        label_phF->setFont(font);
+
+        gridLayout_7->addWidget(label_phF, 3, 3, 1, 1);
+
+        label_18 = new QLabel(page_8);
+        label_18->setObjectName(QString::fromUtf8("label_18"));
+        label_18->setFont(font1);
+        label_18->setAlignment(Qt::AlignCenter);
+
+        gridLayout_7->addWidget(label_18, 0, 0, 1, 4);
+
+        stackedWidget_Main->addWidget(page_8);
+
+        verticalLayout_4->addWidget(stackedWidget_Main);
+
+
+        verticalLayout_3->addWidget(frame);
+
+        stackedWidget->addWidget(page_main);
+        page_Setting = new QWidget();
+        page_Setting->setObjectName(QString::fromUtf8("page_Setting"));
+        QFont font2;
+        font2.setPointSize(8);
+        page_Setting->setFont(font2);
+        verticalLayout_5 = new QVBoxLayout(page_Setting);
+        verticalLayout_5->setSpacing(0);
+        verticalLayout_5->setContentsMargins(11, 11, 11, 11);
+        verticalLayout_5->setObjectName(QString::fromUtf8("verticalLayout_5"));
+        verticalLayout_5->setContentsMargins(0, 0, 0, 0);
+        frame_2 = new QFrame(page_Setting);
+        frame_2->setObjectName(QString::fromUtf8("frame_2"));
+        frame_2->setFont(font);
+        frame_2->setFrameShape(QFrame::StyledPanel);
+        frame_2->setFrameShadow(QFrame::Raised);
+        verticalLayout_7 = new QVBoxLayout(frame_2);
+        verticalLayout_7->setSpacing(6);
+        verticalLayout_7->setContentsMargins(11, 11, 11, 11);
+        verticalLayout_7->setObjectName(QString::fromUtf8("verticalLayout_7"));
+        verticalLayout_7->setContentsMargins(0, 0, 0, 0);
+        stackedWidget_Setting = new QStackedWidget(frame_2);
+        stackedWidget_Setting->setObjectName(QString::fromUtf8("stackedWidget_Setting"));
+        stackedWidget_Setting->setFont(font);
+        stackedWidget_Setting->setStyleSheet(QString::fromUtf8(""));
+        page_2 = new QWidget();
+        page_2->setObjectName(QString::fromUtf8("page_2"));
+        page_2->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);"));
+        gridLayout_2 = new QGridLayout(page_2);
+        gridLayout_2->setSpacing(0);
+        gridLayout_2->setContentsMargins(11, 11, 11, 11);
+        gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
+        gridLayout_2->setContentsMargins(0, 0, 0, 0);
+        label_SaveName = new QLabel(page_2);
+        label_SaveName->setObjectName(QString::fromUtf8("label_SaveName"));
+        label_SaveName->setFont(font);
+
+        gridLayout_2->addWidget(label_SaveName, 3, 0, 1, 1);
+
+        label_chName_2 = new QLabel(page_2);
+        label_chName_2->setObjectName(QString::fromUtf8("label_chName_2"));
+        label_chName_2->setFont(font1);
+        label_chName_2->setAlignment(Qt::AlignCenter);
+
+        gridLayout_2->addWidget(label_chName_2, 0, 0, 1, 2);
+
+        label_MSName = new QLabel(page_2);
+        label_MSName->setObjectName(QString::fromUtf8("label_MSName"));
+        label_MSName->setFont(font);
+
+        gridLayout_2->addWidget(label_MSName, 2, 0, 1, 1);
+
+        label_addressData = new QLabel(page_2);
+        label_addressData->setObjectName(QString::fromUtf8("label_addressData"));
+        label_addressData->setFont(font);
+        label_addressData->setStyleSheet(QString::fromUtf8(""));
+        label_addressData->setAlignment(Qt::AlignCenter);
+
+        gridLayout_2->addWidget(label_addressData, 1, 1, 1, 1);
+
+        label_addressName = new QLabel(page_2);
+        label_addressName->setObjectName(QString::fromUtf8("label_addressName"));
+        label_addressName->setFont(font);
+
+        gridLayout_2->addWidget(label_addressName, 1, 0, 1, 1);
+
+        label_MSData = new QLabel(page_2);
+        label_MSData->setObjectName(QString::fromUtf8("label_MSData"));
+        label_MSData->setFont(font);
+        label_MSData->setAlignment(Qt::AlignCenter);
+
+        gridLayout_2->addWidget(label_MSData, 2, 1, 1, 1);
+
+        label_SaveData = new QLabel(page_2);
+        label_SaveData->setObjectName(QString::fromUtf8("label_SaveData"));
+        label_SaveData->setFont(font);
+        label_SaveData->setAlignment(Qt::AlignCenter);
+
+        gridLayout_2->addWidget(label_SaveData, 3, 1, 1, 1);
+
+        stackedWidget_Setting->addWidget(page_2);
+        page_6 = new QWidget();
+        page_6->setObjectName(QString::fromUtf8("page_6"));
+        page_6->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);"));
+        gridLayout_5 = new QGridLayout(page_6);
+        gridLayout_5->setSpacing(0);
+        gridLayout_5->setContentsMargins(11, 11, 11, 11);
+        gridLayout_5->setObjectName(QString::fromUtf8("gridLayout_5"));
+        gridLayout_5->setContentsMargins(0, 0, 0, 0);
+        label_chName_3 = new QLabel(page_6);
+        label_chName_3->setObjectName(QString::fromUtf8("label_chName_3"));
+        label_chName_3->setFont(font1);
+        label_chName_3->setAlignment(Qt::AlignCenter);
+
+        gridLayout_5->addWidget(label_chName_3, 0, 0, 1, 2);
+
+        label_42 = new QLabel(page_6);
+        label_42->setObjectName(QString::fromUtf8("label_42"));
+        label_42->setFont(font);
+
+        gridLayout_5->addWidget(label_42, 1, 0, 1, 1);
+
+        label_V_3 = new QLabel(page_6);
+        label_V_3->setObjectName(QString::fromUtf8("label_V_3"));
+        label_V_3->setFont(font);
+        label_V_3->setStyleSheet(QString::fromUtf8(""));
+        label_V_3->setAlignment(Qt::AlignCenter);
+
+        gridLayout_5->addWidget(label_V_3, 1, 1, 1, 1);
+
+        stackedWidget_Setting->addWidget(page_6);
+
+        verticalLayout_7->addWidget(stackedWidget_Setting);
+
+
+        verticalLayout_5->addWidget(frame_2);
+
+        stackedWidget->addWidget(page_Setting);
+        page_3 = new QWidget();
+        page_3->setObjectName(QString::fromUtf8("page_3"));
+        verticalLayout_2 = new QVBoxLayout(page_3);
+        verticalLayout_2->setSpacing(0);
+        verticalLayout_2->setContentsMargins(11, 11, 11, 11);
+        verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
+        verticalLayout_2->setContentsMargins(0, 0, 0, 0);
+        frame_5 = new QFrame(page_3);
+        frame_5->setObjectName(QString::fromUtf8("frame_5"));
+        QFont font3;
+        font3.setPointSize(26);
+        frame_5->setFont(font3);
+        frame_5->setFrameShape(QFrame::StyledPanel);
+        frame_5->setFrameShadow(QFrame::Raised);
+        gridLayout = new QGridLayout(frame_5);
+        gridLayout->setSpacing(6);
+        gridLayout->setContentsMargins(11, 11, 11, 11);
+        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+        gridLayout->setHorizontalSpacing(5);
+        gridLayout->setVerticalSpacing(0);
+        gridLayout->setContentsMargins(0, 0, 0, 0);
+
+        verticalLayout_2->addWidget(frame_5);
+
+        stackedWidget->addWidget(page_3);
+
+        verticalLayout->addWidget(stackedWidget);
+
+
+        retranslateUi(Widget);
+
+        stackedWidget->setCurrentIndex(0);
+        stackedWidget_Main->setCurrentIndex(0);
+        stackedWidget_Setting->setCurrentIndex(1);
+
+
+        QMetaObject::connectSlotsByName(Widget);
+    } // setupUi
+
+    void retranslateUi(QWidget *Widget)
+    {
+        Widget->setWindowTitle(QApplication::translate("Widget", "Widget", nullptr));
+        label->setText(QApplication::translate("Widget", "SmartPDU", nullptr));
+        label_modbus_type->setText(QApplication::translate("Widget", "ModbusType: ", nullptr));
+        label_3->setText(QApplication::translate("Widget", "Ip:192.168.155.132", nullptr));
+        label_5->setText(QApplication::translate("Widget", "Time:14:32:16", nullptr));
+        label_4->setText(QApplication::translate("Widget", "Date:2024.4.18", nullptr));
+        label_2->setText(QApplication::translate("Widget", "Version:1.1.0", nullptr));
+        label_modbus_Addr->setText(QApplication::translate("Widget", "ModbusAddress:", nullptr));
+        label_16->setText(QApplication::translate("Widget", "0.0", nullptr));
+        label_12->setText(QApplication::translate("Widget", "Sum(Kw):", nullptr));
+        label_8->setText(QApplication::translate("Widget", "0", nullptr));
+        label_10->setText(QApplication::translate("Widget", "Power(W):", nullptr));
+        label_7->setText(QApplication::translate("Widget", "Volt(V):", nullptr));
+        label_15->setText(QApplication::translate("Widget", "0%", nullptr));
+        label_11->setText(QApplication::translate("Widget", "Factor:", nullptr));
+        label_9->setText(QApplication::translate("Widget", "Cur(A):", nullptr));
+        label_13->setText(QApplication::translate("Widget", "0.0", nullptr));
+        label_14->setText(QApplication::translate("Widget", "0", nullptr));
+        label_6->setText(QApplication::translate("Widget", "Input Vol", nullptr));
+        label_39->setText(QApplication::translate("Widget", "Sum(Kw):", nullptr));
+        label_S->setText(QApplication::translate("Widget", "0", nullptr));
+        label_A->setText(QApplication::translate("Widget", "0.0", nullptr));
+        label_37->setText(QApplication::translate("Widget", "Power(W):", nullptr));
+        label_W->setText(QApplication::translate("Widget", "0.0", nullptr));
+        label_34->setText(QApplication::translate("Widget", "Switch", nullptr));
+        label_V->setText(QApplication::translate("Widget", "OFF", nullptr));
+        label_36->setText(QApplication::translate("Widget", "Cur(A):", nullptr));
+        label_38->setText(QApplication::translate("Widget", "Factor:", nullptr));
+        label_F->setText(QApplication::translate("Widget", "0%", nullptr));
+        label_chName->setText(QApplication::translate("Widget", "Output CH", nullptr));
+        label_chName_4->setText(QApplication::translate("Widget", "Sensor", nullptr));
+        label_43->setText(QApplication::translate("Widget", "Temp", nullptr));
+        label_Temp->setText(QApplication::translate("Widget", "0", nullptr));
+        label_44->setText(QApplication::translate("Widget", "Humidity", nullptr));
+        label_Humidity->setText(QApplication::translate("Widget", "0 %", nullptr));
+        label_24->setText(QApplication::translate("Widget", "Power(W):", nullptr));
+        label_phW->setText(QApplication::translate("Widget", "0.0", nullptr));
+        label_22->setText(QApplication::translate("Widget", "Volt(V):", nullptr));
+        label_phV->setText(QApplication::translate("Widget", "0", nullptr));
+        label_21->setText(QApplication::translate("Widget", "Sum(Kw):", nullptr));
+        label_phKw->setText(QApplication::translate("Widget", "0", nullptr));
+        label_23->setText(QApplication::translate("Widget", "Cur(A):", nullptr));
+        label_phA->setText(QApplication::translate("Widget", "0.0", nullptr));
+        label_20->setText(QApplication::translate("Widget", "Factor:", nullptr));
+        label_phF->setText(QApplication::translate("Widget", "0%", nullptr));
+        label_18->setText(QApplication::translate("Widget", "Output CHA", nullptr));
+        label_SaveName->setText(QApplication::translate("Widget", "Save:", nullptr));
+        label_chName_2->setText(QApplication::translate("Widget", "Set MODBUS", nullptr));
+        label_MSName->setText(QApplication::translate("Widget", "Mode:", nullptr));
+        label_addressData->setText(QApplication::translate("Widget", "0", nullptr));
+        label_addressName->setText(QApplication::translate("Widget", "Address:", nullptr));
+        label_MSData->setText(QApplication::translate("Widget", "master", nullptr));
+        label_SaveData->setText(QApplication::translate("Widget", "NO", nullptr));
+        label_chName_3->setText(QApplication::translate("Widget", "Set Network", nullptr));
+        label_42->setText(QApplication::translate("Widget", "Address", nullptr));
+        label_V_3->setText(QApplication::translate("Widget", "0", nullptr));
+    } // retranslateUi
+
+};
+
+namespace Ui {
+    class Widget: public Ui_Widget {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_WIDGET_H

+ 42 - 0
Qt/Qt_Test_242/volviewform.cpp

@@ -0,0 +1,42 @@
+#include "volviewform.h"
+#include "ui_volviewform.h"
+
+VolViewForm::VolViewForm(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::VolViewForm)
+{
+    ui->setupUi(this);
+
+    type = 0 ;
+    chn = 0;
+
+    voltage = 0.0;
+    current = 0.0;
+    power   = 0.0;
+    factor  = 0.0;
+    consum  = 0.0;
+    sts     = false ;
+
+    ui->label_6->setAlignment(Qt::AlignCenter);
+    if(type==0)
+        ui->label_6->setText("Input Vol");
+    else
+    {
+        QString msg ;
+        msg += "Ch"+QString::number(chn)+":";
+        if(sts==true)
+            msg += "on";
+        else
+            msg += "off";
+    }
+    ui->label_8->setText(QString::number(voltage,'f',2));
+    ui->label_13->setText(QString::number(current,'f',2));
+    ui->label_16->setText(QString::number(power,'f',2));
+    ui->label_15->setText(QString::number(factor,'f',2)+"%");
+    ui->label_14->setText(QString::number(consum,'f',2));
+}
+
+VolViewForm::~VolViewForm()
+{
+    delete ui;
+}

+ 33 - 0
Qt/Qt_Test_242/volviewform.h

@@ -0,0 +1,33 @@
+#ifndef VOLVIEWFORM_H
+#define VOLVIEWFORM_H
+
+#include <QWidget>
+
+namespace Ui {
+class VolViewForm;
+}
+
+class VolViewForm : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit VolViewForm(QWidget *parent = 0);
+    ~VolViewForm();
+
+
+
+private:
+    Ui::VolViewForm *ui;
+    bool type ;
+    short chn ;
+    QString title;
+    float   voltage;
+    float   current;
+    float   power ;
+    float   factor;
+    float   consum;
+    bool    sts ;
+};
+
+#endif // VOLVIEWFORM_H

+ 188 - 0
Qt/Qt_Test_242/volviewform.ui

@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>VolViewForm</class>
+ <widget class="QWidget" name="VolViewForm">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>160</width>
+    <height>128</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <property name="styleSheet">
+   <string notr="true">QFrame
+{
+	background-color: rgb(85, 87, 83);
+}
+QLabel
+{
+	color: rgb(115, 210, 22);
+}</string>
+  </property>
+  <widget class="QFrame" name="frame_2">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>160</width>
+     <height>131</height>
+    </rect>
+   </property>
+   <property name="frameShape">
+    <enum>QFrame::StyledPanel</enum>
+   </property>
+   <property name="frameShadow">
+    <enum>QFrame::Raised</enum>
+   </property>
+   <widget class="QLabel" name="label_6">
+    <property name="geometry">
+     <rect>
+      <x>10</x>
+      <y>0</y>
+      <width>131</width>
+      <height>21</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Input Vol</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label_7">
+    <property name="geometry">
+     <rect>
+      <x>10</x>
+      <y>21</y>
+      <width>85</width>
+      <height>17</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Volt(V):</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label_8">
+    <property name="geometry">
+     <rect>
+      <x>103</x>
+      <y>21</y>
+      <width>47</width>
+      <height>17</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>0</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label_9">
+    <property name="geometry">
+     <rect>
+      <x>11</x>
+      <y>45</y>
+      <width>85</width>
+      <height>16</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Cur(A):</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label_10">
+    <property name="geometry">
+     <rect>
+      <x>11</x>
+      <y>68</y>
+      <width>85</width>
+      <height>16</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Power(W):</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label_11">
+    <property name="geometry">
+     <rect>
+      <x>11</x>
+      <y>91</y>
+      <width>85</width>
+      <height>16</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Factor:</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label_12">
+    <property name="geometry">
+     <rect>
+      <x>11</x>
+      <y>114</y>
+      <width>85</width>
+      <height>16</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Sum(Kw):</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label_13">
+    <property name="geometry">
+     <rect>
+      <x>103</x>
+      <y>45</y>
+      <width>47</width>
+      <height>16</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>0.0</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label_14">
+    <property name="geometry">
+     <rect>
+      <x>103</x>
+      <y>114</y>
+      <width>47</width>
+      <height>16</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>0</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label_15">
+    <property name="geometry">
+     <rect>
+      <x>103</x>
+      <y>91</y>
+      <width>47</width>
+      <height>16</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>0%</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label_16">
+    <property name="geometry">
+     <rect>
+      <x>103</x>
+      <y>68</y>
+      <width>47</width>
+      <height>16</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>0.0</string>
+    </property>
+   </widget>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 487 - 0
Qt/Qt_Test_242/widget.cpp

@@ -0,0 +1,487 @@
+#include "widget.h"
+#include "ui_widget.h"
+#include<QNetworkInterface>
+#include<QDateTime>
+#include<QProcess>
+#include "buttonclickthread.h"
+#include <QPainter>
+#include "pdu_ctrl.h"
+#include <QSettings>
+Widget::Widget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::Widget)
+{
+    ui->setupUi(this);
+    //ui->stackedWidget->setCurrentIndex(1);
+    nChidIndex=0;
+    nChidPHIndex=0;
+    nMAXChildIndex=0;
+    m_nAngle=0;
+    m_nWidth = 160;
+    m_nHeight = 128;
+    m_pAngleCtrl=NULL;
+#ifdef RS485Type
+    ui->label_MSName->hide();
+    ui->label_MSData->hide();
+    ui->label_3->hide();
+    ui->label_4->hide();
+    ui->label_5->hide();
+#else
+    //ui->label_MSName->hide();
+    //ui->label_MSData->hide();
+    //ui->label_3->hide();
+    //ui->label_4->hide();
+    //ui->label_5->hide();
+    ui->label_modbus_type->hide();
+    ui->label_modbus_Addr->hide();
+#endif
+#ifdef hightSmartPDU
+    ui->label_modbus_type->hide();
+    ui->label_modbus_Addr->hide();
+#endif
+    //定时器初始化读取配置文件:默认5秒一刷新
+    QString pAddress = QCoreApplication::applicationDirPath() + "/" + "smartPDU.ini";
+    qDebug()<<"SettingPath:"<<pAddress;
+    QSettings settings(pAddress, QSettings::IniFormat);
+    int nTimerData=5000;
+    switch (settings.status()) {
+    case QSettings::NoError:
+        qDebug() << "successed";
+        break;
+    case QSettings::FormatError:
+        qDebug() << "code Error";
+        break;
+    case QSettings::AccessError:
+        qDebug() << "load Error";
+        break;
+    }
+    if(settings.contains("misc/fliptime"))
+    {
+        QString strTime=settings.value("misc/fliptime").toString();
+        nTimerData=strTime.toInt();
+        nTimerData*=1000;
+        qDebug()<<"[misc]fliptime="<<strTime <<"Int="<<nTimerData;
+    }else
+    {
+        nTimerData=5000;
+        QString strTime=settings.value("misc/fliptime").toString();
+        qDebug()<<"misc/fliptime="<<strTime;
+    }
+
+    if(nTimerData>0)
+    {
+        m_Timer = new QTimer;
+        m_Timer->setInterval(nTimerData);// 设置默认定时时长1000ms
+        connect(m_Timer, &QTimer::timeout, this,&Widget::slot_TimerRun);
+        m_Timer->start(nTimerData);
+        qDebug()<<"Timer Start msec="<<nTimerData;
+    }else
+    {
+        qDebug()<<"Timer Not Run";
+        m_Timer=nullptr;
+    }
+}
+
+Widget::~Widget()
+{
+    delete ui;
+}
+
+void Widget::setInitData(QGraphicsProxyWidget *pAngleCtrl, QGraphicsView* pView, int nWidth, int nHeight)
+{
+    m_pAngleCtrl=pAngleCtrl;
+    m_nWidth= nWidth;
+    m_nHeight = nHeight;
+    m_pView=pView;
+}
+
+int Widget::getShowModeIndex()
+{
+    return ui->stackedWidget->currentIndex();
+}
+
+int Widget::getShowPagIndex()
+{
+    return ui->stackedWidget_Main->currentIndex();
+}
+
+int Widget::getShowSubIndex()
+{
+    return nChidIndex;
+}
+int Widget::getShowPHIndex()
+{
+    return nChidPHIndex;
+}
+
+void Widget::setShowPHIndex(int nIndex)
+{
+    nChidPHIndex=nIndex;
+    setPH(nChidIndex,nChidPHIndex);
+}
+
+void Widget::UpdateDate()
+{
+    QDateTime currentTime = QDateTime::currentDateTime();
+    QString strDate="Date:"+currentTime.toString("yyyy.MM.dd");
+    QString strTime="Time:"+currentTime.toString("HH:mm:ss");
+    if(ui)
+    {
+        ui->label_4->setText(strDate);
+        ui->label_5->setText(strTime);
+    }
+    QString strIP="IP:"+ReadIP();
+    ui->label_3->setText(strIP);
+
+    if(pdu_Ctrl::instance()->m_nModbusMSType!=1)
+    {
+        ui->label_modbus_type->setText(QString("ModbusType: %1").arg( "master"));
+    }else
+    {
+        ui->label_modbus_type->setText(QString("ModbusType: %1").arg("slave"));
+    }
+
+    ui->label_modbus_Addr->setText(QString("ModbusAddress: %1").arg(pdu_Ctrl::instance()->m_nModbusAddress));
+}
+
+QString Widget::ReadIP()
+{
+    QProcess process;
+    QString program = "ip"; // 或者 "ifconfig"
+    QStringList arguments;
+    if (program == "ip") {
+        arguments << "addr" << "show" << "eth0";
+    } else if (program == "ifconfig") {
+        arguments << "eth0";
+    }
+    process.start(program, arguments);
+    process.waitForFinished();
+
+    QString output = process.readAllStandardOutput();
+    QRegExp ipRegex("\\binet (\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})/\\d{1,2}\\b");
+
+    int pos = 0;
+    while ((pos = ipRegex.indexIn(output, pos)) != -1) {
+        return ipRegex.cap(1);
+    }
+    return ""; // 没有找到IP地址
+}
+
+void Widget::SetData(QLabel *pLab, QString strShow)
+{
+    if(pLab)
+    {
+        pLab->setText(strShow);
+    }
+}
+
+void Widget::SetV(QString strShow){SetData(ui->label_8,strShow);SetData(ui->label_phV,strShow);}
+
+void Widget::SetA(QString strShow){SetData(ui->label_13,strShow);SetData(ui->label_A,strShow);SetData(ui->label_phA,strShow);}
+
+void Widget::SetW(QString strShow){SetData(ui->label_16,strShow);SetData(ui->label_W,strShow);SetData(ui->label_phW,strShow);}
+
+void Widget::SetF(QString strShow){SetData(ui->label_15,strShow);SetData(ui->label_F,strShow);SetData(ui->label_phF,strShow);}
+
+void Widget::SetSUM(QString strShow){SetData(ui->label_14,strShow);SetData(ui->label_S,strShow);SetData(ui->label_phKw,strShow);}
+
+void Widget::SetT(QString strShow){SetData(ui->label_Temp,strShow);}
+void Widget::SetH(QString strShow){SetData(ui->label_Humidity,strShow+"%");}
+void Widget::SetStatus(QString strShow){SetData(ui->label_V,strShow);}
+
+void Widget::SetIP(QString strIP)
+{
+    if(ui)
+    {
+        ui->label_3->setText(strIP);
+    }
+}
+
+void Widget::setCH(int nIndex)
+{
+    QString  strShow=QString("Output CH%1").arg(nIndex);
+    SetData(ui->label_chName,strShow);
+
+}
+void Widget::setPH(int nIndex,int nPHType)
+{
+    QString  strShow="";
+    switch (nPHType) {
+    case 1:
+        strShow="-A";
+        break;
+    case 2:
+        strShow="-B";
+        break;
+    case 3:
+        strShow="-C";
+        break;
+    default:
+        break;
+    }
+
+    QString  strPHShow="";
+    if(nIndex<=0)
+    {
+        strPHShow=QString("Input Vol%1").arg(strShow);
+    }else
+    {
+        strPHShow=QString("Output CH%1%2").arg(nIndex).arg(strShow);
+    }
+    SetData(ui->label_18,strPHShow);
+    qDebug()<<"CH_Select:"<<nIndex<<"PH_Select:"<<nPHType;
+}
+/*
+void Widget::BtnDown(int nButtonID, int nDownType)
+{
+    switch (nButtonID) {
+        case GPIO_KEY1:
+            //1按钮
+            if(nDownType==BtnDown_C)
+            {
+                pageUp();
+            }
+            break;
+        case GPIO_KEY2:
+            {
+            }
+            break;
+        case GPIO_KEY3:
+            //3按钮
+            if(nDownType==BtnDown_C)
+            {
+                pageDown();
+            }
+            break;
+        case GPIO_KEY4:
+
+            break;
+        default:
+            break;
+    }
+    qDebug()<<"Key"<<nButtonID<<" Type="<<nDownType;
+}
+*/
+void Widget::pageUp()
+{
+    int nIndex=ui->stackedWidget_Main->currentIndex();
+    switch (nIndex) {
+    case 1://
+    {
+        if(nMAXChildIndex>0)
+        {
+            nChidIndex=1;
+            nChidPHIndex=0;
+            setCH(nChidIndex);
+            ui->stackedWidget_Main->setCurrentIndex(2);
+        }else
+        {
+            ui->stackedWidget_Main->setCurrentIndex(3);
+        }
+    }
+        break;
+    case 2://通道页面
+    {
+        if(nChidIndex<nMAXChildIndex)
+        {
+            setCH(nChidIndex);
+            nChidIndex+=1;
+            nChidPHIndex=0;
+        }else
+        {
+            ui->stackedWidget_Main->setCurrentIndex(3);
+            nChidIndex=0;
+            nChidPHIndex=0;
+        }
+    }
+        break;
+    case 3://传感器页面
+    {
+        ui->stackedWidget_Main->setCurrentIndex(0);
+    }
+    break;
+    case 4://ph通道页面
+        {
+            if(nChidPHIndex<=2&&nChidPHIndex>=1)
+            {
+                nChidPHIndex+=1;
+                setPH(nChidIndex,nChidPHIndex);
+            }else if(nChidPHIndex=3||nChidPHIndex==0)
+            {
+                nChidPHIndex=1;
+                setPH(nChidIndex,nChidPHIndex);
+            }
+        }
+        break;
+    default:
+    {
+        ui->stackedWidget_Main->setCurrentIndex(nIndex+1);
+    }
+        break;
+    }
+    qDebug()<<"Index:"<<nIndex<<"ChID:"<<nChidIndex;
+}
+
+void Widget::pageDown()
+{
+    int nIndex=ui->stackedWidget_Main->currentIndex();
+    if(nIndex==0)
+    {
+
+        ui->stackedWidget_Main->setCurrentIndex(3);
+    }else if(nIndex==3)
+    {
+        if(nMAXChildIndex>0)
+        {
+            nChidIndex=nMAXChildIndex;
+            setCH(nChidIndex);
+            ui->stackedWidget_Main->setCurrentIndex(2);
+        }else
+        {
+            ui->stackedWidget_Main->setCurrentIndex(1);
+        }
+
+    }
+    else if(nIndex==2)
+    {
+        if(nChidIndex<=1)
+        {
+            ui->stackedWidget_Main->setCurrentIndex(1);
+            nChidIndex=0;
+        }
+        else
+        {
+            setCH(nChidIndex);
+            nChidIndex-=1;
+        }
+    }else if(nIndex==4)
+    {
+        if(nChidPHIndex<=3&&nChidPHIndex>=2)
+        {
+            nChidPHIndex-=1;
+            setPH(nChidIndex,nChidPHIndex);
+        }else if(nChidPHIndex=1||nChidPHIndex==0)
+        {
+            nChidPHIndex=3;
+            setPH(nChidIndex,nChidPHIndex);
+        }
+    }else
+    {
+        ui->stackedWidget_Main->setCurrentIndex(nIndex-1);
+    }
+    qDebug()<<"Index:"<<nIndex<<"ChID:"<<nChidIndex;
+}
+
+void Widget::ChangeView(int widgetType, int nIndex)
+{
+    if(widgetType_Main==widgetType)
+    {
+        qDebug()<<"Widget->ChangeView->widgetType_Main index="<<nIndex;
+        if(nIndex==0)
+        {
+            ui->stackedWidget->setCurrentIndex(0);
+            ui->stackedWidget_Main->setCurrentIndex(0);
+            nChidIndex=0;
+        }else
+        {
+            ui->stackedWidget->setCurrentIndex(0);
+            ui->stackedWidget_Main->setCurrentIndex(nIndex);
+        }
+    }else if(widgetType_Setting==widgetType)
+    {
+        qDebug()<<"Widget->ChangeView->widgetType_Setting index="<<nIndex;
+        ui->stackedWidget->setCurrentIndex(1);
+        switch (nIndex) {
+        case settingMode_Modbus:
+        {
+            ui->stackedWidget_Setting->setCurrentIndex(0);
+            break;
+        }
+        case settingMode_IP:
+        {
+            ui->stackedWidget_Setting->setCurrentIndex(1);
+            break;
+        }
+        }
+    }
+}
+
+void Widget::setSelectStatus(int nIndex)
+{
+    ui->label_addressName->setStyleSheet(LABEL_Defalut);
+    ui->label_addressData->setStyleSheet(LABEL_Defalut);
+    ui->label_MSData->setStyleSheet(LABEL_Defalut);
+    ui->label_MSName->setStyleSheet(LABEL_Defalut);
+    ui->label_SaveName->setStyleSheet(LABEL_Defalut);
+    ui->label_SaveData->setStyleSheet(LABEL_Defalut);
+    switch (nIndex) {
+    case 0://address
+    {
+        ui->label_addressName->setStyleSheet(LABEL_SELECT);
+        ui->label_addressData->setStyleSheet(LABEL_SELECT);
+    }break;
+    case 1://SAVE
+    {
+        ui->label_SaveName->setStyleSheet(LABEL_SELECT);
+        ui->label_SaveData->setStyleSheet(LABEL_SELECT);
+    }break;
+    case 2://主从
+    {
+        ui->label_MSData->setStyleSheet(LABEL_SELECT);
+        ui->label_MSName->setStyleSheet(LABEL_SELECT);
+    }break;
+    }
+}
+
+void Widget::CtrlBtnSet(int nIndex, int nData)
+{
+    switch (nIndex) {
+    case 0://address
+    {
+        ui->label_addressData->setText(QString::number(nData));
+    }break;
+    case 1://SAVE
+    {
+        if(nData==1)
+        {
+            ui->label_SaveData->setText("YES");
+        }else
+        {
+            ui->label_SaveData->setText("NO");
+        }
+
+    }break;
+    case 2://主从
+    {
+        if(nData!=1)
+        {
+            ui->label_MSData->setText("master");
+        }else
+        {
+            ui->label_MSData->setText("slave");
+        }
+    }break;
+    }
+}
+
+void Widget::slot_TimerRun()
+{
+    int nIndex=ui->stackedWidget->currentIndex();
+    int nSubIndex=ui->stackedWidget_Main->currentIndex();
+    if(nIndex==0&&nSubIndex==2)//通道页面标记
+    {
+
+        if(nChidIndex<nMAXChildIndex)
+        {
+            setCH(nChidIndex);
+            nChidIndex+=1;
+            nChidPHIndex=0;
+        }else
+        {
+            nChidIndex=1;
+            nChidPHIndex=0;
+            setCH(nChidIndex);
+        }
+        qDebug()<<"Timer Once ----nChidIndex="<<nChidIndex;
+    }
+}

+ 100 - 0
Qt/Qt_Test_242/widget.h

@@ -0,0 +1,100 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+#include "udphelper.h"
+#include "volviewform.h"
+#include <QList>
+#include <QLabel>
+#include <QGraphicsProxyWidget>
+#include <QGraphicsView>
+#include <QTimer>
+namespace Ui {
+class Widget;
+}
+//ST7735驱动
+#define ST7735_ERROR
+
+#ifdef ST7735_ERROR
+//ST7735 驱动使用GRB红色与蓝色位置相反
+#define LABEL_RED "QLabel{color: blue;}"
+#define LABEL_GREEN "QLabel{color: rgb(255, 255, 255);}"
+
+#define LABEL_SELECT  "background-color:blue;color: white;"
+#define LABEL_Defalut "background-color:rgb(0, 0, 0);color: white;"
+#else
+#define LABEL_RED "QLabel{color: red;}"
+#define LABEL_GREEN "QLabel{color: rgb(115, 210, 22);}"
+
+#define LABEL_SELECT  "background-color:rgb(115, 210, 22);color: white;"
+#define LABEL_Defalut "background-color:rgb(85, 87, 83);color: rgb(115, 210, 22);"
+#endif
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit Widget(QWidget *parent = 0);
+    ~Widget();
+    void setInitData(QGraphicsProxyWidget* pAngleCtrl, QGraphicsView* pView, int nWidget,int nHight);
+    //是否显示详细数据
+    int getShowModeIndex();
+    int getShowPagIndex();
+    int getShowSubIndex();
+    int getShowPHIndex();
+    void setShowPHIndex(int nIndex);
+    //更新日期IP
+    void UpdateDate();
+    QString ReadIP();
+
+
+    void SetData(QLabel* pLab,QString strShow);
+    void SetV(QString strShow);
+    void SetA(QString strShow);
+    void SetW(QString strShow);
+    void SetF(QString strShow);
+    void SetSUM(QString strShow);
+    void SetIP(QString strIP);
+    void SetT(QString strShow);
+    void SetH(QString strShow);
+    void setCH(int nIndex);
+    void setPH(int nIndex,int nPhID);
+    void SetStatus(QString strShow);
+    //点击事件
+    //void BtnDown(int nButtonID,int nDownType);
+
+    //上翻页
+    void pageUp();
+    //下翻页
+    void pageDown();
+    //切换页面
+    void ChangeView(int widgetType,int nIndex);
+    //modbus设置
+    void setSelectStatus(int nIndex);
+    void CtrlBtnSet(int nIndex,int nData);
+    int nMAXChildIndex;
+private slots:
+    void slot_TimerRun();
+public:
+    Ui::Widget *ui;
+private:
+
+    UdpHelper* udpHelper;
+    int device_type ;
+    int device_chn ;
+    QList<VolViewForm*> volView;
+    //当前显示页面ID
+    int nChidIndex;
+    int nChidPHIndex;
+    int m_nAngle;
+    QGraphicsProxyWidget* m_pAngleCtrl;
+    QGraphicsView* m_pView;
+    int m_nWidth;
+    int m_nHeight;
+
+    QTimer* m_Timer;
+
+};
+
+#endif // WIDGET_H

Разлика између датотеке није приказан због своје велике величине
+ 1120 - 0
Qt/Qt_Test_242/widget.ui