diff --git a/WeighUI/CMakeLists.txt b/WeighUI/CMakeLists.txt
new file mode 100644
index 0000000..3c7b608
--- /dev/null
+++ b/WeighUI/CMakeLists.txt
@@ -0,0 +1,73 @@
+cmake_minimum_required(VERSION 3.5)
+
+project(WeighUI VERSION 0.1 LANGUAGES CXX)
+
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
+
+if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
+ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Multimedia)
+else()
+ find_package(Qt5 REQUIRED COMPONENTS Multimedia)
+endif()
+
+# fastdds 路径(与称重系统主项目保持一致)
+set(fastcdr_DIR "/opt/fastdds/v3.2.2/lib/cmake/fastcdr")
+set(fastdds_DIR "/opt/fastdds/v3.2.2/share/fastdds/cmake")
+set(foonathan_memory_DIR "/opt/foonathan_memory/lib/foonathan_memory/cmake")
+
+find_package(fastcdr REQUIRED)
+find_package(fastdds 3 REQUIRED)
+
+set(PROJECT_SOURCES
+ main.cpp
+ weighui.cpp
+ weighui.h
+ weighui.ui
+ dds/Subscriber.hpp
+ dds/Subscriber.cxx
+ dds/msg.hpp
+ lib/WeighingDDSTypePubSubTypes.cxx
+ lib/WeighingDDSTypeTypeObjectSupport.cxx
+)
+
+if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
+ qt_add_executable(WeighUI
+ MANUAL_FINALIZATION
+ ${PROJECT_SOURCES}
+ )
+else()
+ if(ANDROID)
+ add_library(WeighUI SHARED
+ ${PROJECT_SOURCES}
+ )
+ else()
+ add_executable(WeighUI
+ ${PROJECT_SOURCES}
+ )
+ endif()
+endif()
+
+target_include_directories(WeighUI PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/lib
+ ${CMAKE_CURRENT_SOURCE_DIR}/dds
+)
+
+target_link_libraries(WeighUI PRIVATE
+ Qt${QT_VERSION_MAJOR}::Widgets
+ Qt${QT_VERSION_MAJOR}::Multimedia
+ fastcdr
+ fastdds
+)
+
+if(QT_VERSION_MAJOR EQUAL 6)
+ qt_finalize_executable(WeighUI)
+endif()
diff --git a/WeighUI/CMakeLists.txt.user b/WeighUI/CMakeLists.txt.user
new file mode 100644
index 0000000..46cb6b4
--- /dev/null
+++ b/WeighUI/CMakeLists.txt.user
@@ -0,0 +1,427 @@
+
+
+
+
+
+ EnvironmentId
+ {09fdd0ee-4ff0-46bb-988e-172ff105940f}
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ UTF-8
+ false
+ 4
+ false
+ 80
+ true
+ true
+ 1
+ 0
+ false
+ true
+ false
+ 0
+ true
+ true
+ 0
+ 8
+ true
+ false
+ 1
+ true
+ true
+ true
+ *.md, *.MD, Makefile
+ false
+ true
+ true
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ GenericLinuxOsType
+ atk_3506
+ atk_3506
+ {59205b7c-6373-440d-a783-74d73d62fb24}
+ 0
+ 0
+ 0
+
+ Debug
+ 2
+ false
+
+ -DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_BUILD_TYPE:STRING=Debug
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+ 0
+ /home/alientek/WeighUI/build-WeighUI-atk_3506-Debug
+
+
+
+
+ all
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ 构建
+ 构建
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ 清除
+ 清除
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Debug
+ CMakeProjectManager.CMakeBuildConfiguration
+
+
+ Release
+ 2
+ false
+
+ -DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_BUILD_TYPE:STRING=Release
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+ /home/alientek/WeighUI/build-WeighUI-atk_3506-Release
+
+
+
+
+ all
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ 构建
+ 构建
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ 清除
+ 清除
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Release
+ CMakeProjectManager.CMakeBuildConfiguration
+
+
+ RelWithDebInfo
+ 2
+ false
+
+ -DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+ /home/alientek/WeighUI/build-WeighUI-atk_3506-RelWithDebInfo
+
+
+
+
+ all
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ 构建
+ 构建
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ 清除
+ 清除
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Release with Debug Information
+ CMakeProjectManager.CMakeBuildConfiguration
+
+
+ RelWithDebInfo
+ 2
+ false
+
+ -DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+ 0
+ /home/alientek/WeighUI/build-WeighUI-atk_3506-Profile
+
+
+
+
+ all
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ 构建
+ 构建
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ 清除
+ 清除
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Profile
+ CMakeProjectManager.CMakeBuildConfiguration
+
+
+ MinSizeRel
+ 2
+ false
+
+ -DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+ /home/alientek/WeighUI/build-WeighUI-atk_3506-MinSizeRel
+
+
+
+
+ all
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ 构建
+ 构建
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ 清除
+ 清除
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Minimum Size Release
+ CMakeProjectManager.CMakeBuildConfiguration
+
+ 5
+
+
+
+ true
+ RemoteLinux.KillAppStep
+
+
+
+
+
+
+
+
+ true
+ RemoteLinux.RsyncDeployStep
+
+
+
+
+
+
+ -av
+
+ 2
+ 部署
+ 部署
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ DeployToGenericLinux
+
+ 1
+
+ true
+ true
+ 0
+ true
+
+ 2
+
+ false
+
+ ProjectExplorer.CustomExecutableRunConfiguration
+
+ false
+ true
+ true
+
+
+ true
+ true
+ 0
+ true
+
+ 1
+
+ false
+ 自定义执行档2
+ RemoteLinux.CustomRunConfig
+
+ true
+ 1
+ true
+ true
+ :0
+
+ 2
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 22
+
+
+ Version
+ 22
+
+
diff --git a/WeighUI/main.cpp b/WeighUI/main.cpp
new file mode 100644
index 0000000..9d71309
--- /dev/null
+++ b/WeighUI/main.cpp
@@ -0,0 +1,43 @@
+#include "weighui.h"
+
+#include
+#include
+#include
+#include
+#include
+
+int main(int argc, char *argv[])
+{
+ // 使用 linuxfb 平台
+ qputenv("QT_QPA_PLATFORM", "linuxfb");
+ qputenv("QT_PLUGIN_PATH", "/userdata/lib/qt/plugins");
+
+ QApplication a(argc, argv);
+
+ // ── 解析命令行参数 ──
+ QCommandLineParser parser;
+ parser.setApplicationDescription("WeighUI - 称重系统 UI");
+ parser.addHelpOption();
+ parser.addVersionOption();
+
+ QCommandLineOption domainOpt(QStringList() << "d" << "domain",
+ "DDS domain id (default 0).",
+ "id", "0");
+ parser.addOption(domainOpt);
+
+ parser.process(a);
+
+ bool ok = false;
+ int domainId = parser.value(domainOpt).toInt(&ok);
+ if (!ok || domainId < 0) {
+ qWarning() << "Invalid --domain value:" << parser.value(domainOpt)
+ << ", fallback to 0";
+ domainId = 0;
+ }
+
+ qDebug() << "WeighUI 启动, DDS domain =" << domainId;
+
+ WeighUI w(domainId);
+ w.show();
+ return a.exec();
+}
\ No newline at end of file
diff --git a/WeighUI/main.qml b/WeighUI/main.qml
new file mode 100644
index 0000000..9fafbdc
--- /dev/null
+++ b/WeighUI/main.qml
@@ -0,0 +1,51 @@
+import QtQuick 2.15
+
+Rectangle {
+ id: root
+ width: 800
+ height: 1280
+ color: "white"
+
+ Image {
+ id: backgroundImage
+ anchors.fill: parent
+ source: "qrc:/123.png"
+ fillMode: Image.PreserveAspectFit
+ smooth: true
+
+ Component.onCompleted: {
+ console.log("QML: 图片加载中...")
+ }
+
+ onStatusChanged: {
+ if (status === Image.Error) {
+ console.log("QML: 图片加载失败")
+ placeholderText.visible = true
+ } else if (status === Image.Ready) {
+ console.log("QML: 图片加载成功")
+ }
+ }
+ }
+
+ Text {
+ id: placeholderText
+ anchors.centerIn: parent
+ text: "背景图片加载失败"
+ color: "red"
+ font.pixelSize: 24
+ visible: false
+ }
+
+ Text {
+ anchors.centerIn: parent
+ text: "QML 界面已显示"
+ font.pixelSize: 40
+ color: "blue"
+ visible: false
+ }
+
+ Component.onCompleted: {
+ console.log("QML: 界面初始化完成")
+ placeholderText.visible = true
+ }
+}
diff --git a/WeighUI/qml.qrc b/WeighUI/qml.qrc
new file mode 100644
index 0000000..995f8f9
--- /dev/null
+++ b/WeighUI/qml.qrc
@@ -0,0 +1,6 @@
+
+
+ main.qml
+ 123.png
+
+