فهرست منبع

添加: xmake 编译

zhuizhu 7 ماه پیش
والد
کامیت
c1d0e85da3

+ 54 - 0
AV/xmake.lua

@@ -10,6 +10,9 @@ end
 -- 基础库
 target("av_base")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("code/base/*.cpp")
     add_headerfiles("code/base/*.h")
     add_av_common_config()
@@ -27,6 +30,9 @@ target("av_base")
 -- 编解码库
 target("av_codec")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("code/codec/*.cpp")
     add_headerfiles("code/codec/*.h")
     add_av_common_config()
@@ -38,6 +44,9 @@ target("av_codec")
 -- 捕获库
 target("av_capture")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("code/capture/*.cpp")
     add_headerfiles("code/capture/*.h")
     add_av_common_config()
@@ -49,6 +58,9 @@ target("av_capture")
 -- 混流库
 target("av_muxer")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("code/muxer/*.cpp")
     add_headerfiles("code/muxer/*.h")
     add_av_common_config()
@@ -60,6 +72,9 @@ target("av_muxer")
 -- 工具库
 target("av_utils")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("code/utils/*.cpp")
     add_headerfiles("code/utils/*.h")
     add_av_common_config()
@@ -71,6 +86,9 @@ target("av_utils")
 -- 完整的AV框架库 - 主项目依赖的统一接口
 target("av_framework")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils")
     add_av_common_config()
     
@@ -80,6 +98,9 @@ target("av_framework")
 -- 播放器库
 target("av_player")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("code/player/*.cpp")
     add_headerfiles("code/player/*.h")
     add_av_common_config()
@@ -94,6 +115,9 @@ target("av_player")
 -- 录制器库
 target("av_recorder")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("code/recorder/*.cpp")
     add_headerfiles("code/recorder/*.h")
     add_av_common_config()
@@ -108,6 +132,9 @@ target("av_recorder")
 -- 基础测试程序
 target("test_basic")
     set_kind("binary")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("test_basic.cpp")
     add_deps("av_base")
     add_common_config()
@@ -118,6 +145,9 @@ target("test_basic")
 -- 编解码测试程序
 target("test_codec")
     set_kind("binary")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("test_codec.cpp")
     add_deps("av_codec")
     add_common_config()
@@ -128,6 +158,9 @@ target("test_codec")
 -- 解码器测试程序
 target("test_decoder")
     set_kind("binary")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("test_decoder.cpp")
     add_deps("av_codec")
     add_common_config()
@@ -139,6 +172,9 @@ target("test_decoder")
 -- 音频编码器测试程序
 target("test_audio_encoder")
     set_kind("binary")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("test_audio_encoder.cpp")
     add_deps("av_codec")
     add_common_config()
@@ -150,6 +186,9 @@ target("test_audio_encoder")
 -- 窗口采集测试程序
 target("test_window_capture")
     set_kind("binary")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("test_window_capture.cpp")
     add_deps("av_capture")
     add_common_config()
@@ -160,6 +199,9 @@ target("test_window_capture")
 -- 工具类测试程序
 target("test_utils")
     set_kind("binary")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("test_utils.cpp")
     add_deps("av_utils")
     add_common_config()
@@ -170,6 +212,9 @@ target("test_utils")
 -- 混流器测试程序
 target("test_muxer")
     set_kind("binary")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("test_muxer.cpp")
     add_deps("av_muxer")
     add_common_config()
@@ -180,6 +225,9 @@ target("test_muxer")
 -- 音频调试测试程序
 target("test_audio_debug")
     set_kind("binary")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("test_audio_debug.cpp")
     add_deps("av_base", "av_codec", "av_utils")
     add_files("code/player/player_core_v2.cpp")
@@ -197,6 +245,9 @@ target("test_audio_debug")
 -- 带UI的播放器测试程序
 target("test_player_with_ui")
     add_rules("qt.widgetapp")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_common_config()
     add_files("test_player_with_ui.cpp", {rules = "qt.moc"})
     add_deps("av_base", "av_codec", "av_utils")
@@ -213,6 +264,9 @@ target("test_player_with_ui")
 target("test_seek_pause_fixed")
     set_kind("binary")
     add_rules("qt.widgetapp")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     add_files("test_seek_pause_fixed.cpp")
     add_deps("av_base", "av_codec", "av_utils")
     add_common_config()

+ 4 - 1
api/xmake.lua

@@ -3,8 +3,11 @@
 
 -- API 库
 target("api_lib")
-    add_rules("qt.shared")
+    add_rules("qt.static")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
     -- 所有源文件
     add_files("*.h", {rules = "qt.moc"})

+ 1 - 1
libs/AVPlayer2/PlayWidget.cpp

@@ -4,7 +4,7 @@
 
 #include "playercontroller.h"
 
-#include "AvRecorder/ui/opengl_video_widget.h"
+#include "../AvRecorder/ui/opengl_video_widget.h"
 #include "audio_effect_gl.h"
 #include "qnamespace.h"
 

+ 4 - 1
libs/AVPlayer2/audio_decode_thread.cpp

@@ -1,6 +1,9 @@
 #include "audio_decode_thread.h"
+
+
+#include "playercontroller.h"
+
 #include <QLoggingCategory>
-#include "AVPlayer2/playercontroller.h"
 
 Q_LOGGING_CATEGORY(playerControllerAudioDecodeThread, "player.controller.AudioDecodeThread")
 

+ 5 - 1
libs/AVPlayer2/log.cpp

@@ -69,7 +69,11 @@ void logOutput(const QtMsgType type, const QMessageLogContext& context, const QS
               .arg(context.line)
               .arg(context.function);
 
-    Output(txt.toStdWString().c_str());
+#ifdef UNICODE
+    Output(reinterpret_cast<LPCWSTR>(txt.toStdWString().c_str()));
+#else
+    Output(txt.toLocal8Bit().constData());
+#endif
 #else // log to file
     if (type <= QtDebugMsg)
         return;

+ 1 - 1
libs/AVPlayer2/mainwindowa.cpp

@@ -11,7 +11,7 @@
 #include "qscreen.h"
 #include "start_play_thread.h"
 
-#include "AvRecorder/ui/opengl_video_widget.h"
+#include "../AvRecorder/ui/opengl_video_widget.h"
 
 #if NDEBUG
 #define AUTO_HIDE_PLAYCONTROL 1 // release version

+ 4 - 1
libs/AVPlayer2/read_thread.cpp

@@ -1,7 +1,10 @@
 #include "read_thread.h"
-#include "AVPlayer2/playercontroller.h"
+
+#include "playercontroller.h"
+
 #include <QLoggingCategory>
 #include <QString>
+
 Q_LOGGING_CATEGORY(playerControllerReadThread, "player.controller.ReadThread")
 
 extern int infinite_buffer;

+ 2 - 1
libs/AVPlayer2/video_play_thread.cpp

@@ -1,6 +1,7 @@
 #include "video_play_thread.h"
 #include <QLoggingCategory>
-#include "AVPlayer2/playercontroller.h"
+
+#include "playercontroller.h"
 
 Q_LOGGING_CATEGORY(playerControllerVideoPlayThread, "player.controller.VideoPlayThread")
 

+ 33 - 30
libs/AVPlayer2/xmake.lua

@@ -3,7 +3,10 @@
 
 -- AvPlayer2 库
 target("avplayer2_lib")
-    add_rules("qt.shared")
+    add_rules("qt.static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
     -- 所有源文件
     add_files("*.cpp")
@@ -40,39 +43,39 @@ target("avplayer2_lib")
     
 target_end()
 
--- AvPlayer2 独立应用程序(如果需要)
-target("AvPlayer2")
-    add_rules("qt.widgetapp")
-    set_kind("binary")
+-- -- AvPlayer2 独立应用程序(如果需要)
+-- target("AvPlayer2")
+--     add_rules("qt.widgetapp")
+--     set_kind("binary")
     
-    -- 设置输出目录
-    set_targetdir("$(projectdir)/bin")
-    if is_mode("debug") then
-        set_targetdir("$(projectdir)/bin_debug")
-        set_basename("AvPlayer2d")
-    end
+--     -- 设置输出目录
+--     set_targetdir("$(projectdir)/bin")
+--     if is_mode("debug") then
+--         set_targetdir("$(projectdir)/bin_debug")
+--         set_basename("AvPlayer2d")
+--     end
     
-    -- 主程序源文件(如果存在)
-    if os.isfile("main.cpp") then
-        add_files("main.cpp")
-    end
+--     -- 主程序源文件(如果存在)
+--     if os.isfile("main.cpp") then
+--         add_files("main.cpp")
+--     end
     
-    -- 依赖库
-    add_deps("avplayer2_lib")
-    -- add_deps("av_framework")  -- 暂时不使用AV模块
+--     -- 依赖库
+--     add_deps("avplayer2_lib")
+--     -- add_deps("av_framework")  -- 暂时不使用AV模块
     
-    -- Qt 配置
-    add_qt_config()
+--     -- Qt 配置
+--     add_qt_config()
     
-    -- FFmpeg 配置
-    add_ffmpeg_config()
+--     -- FFmpeg 配置
+--     add_ffmpeg_config()
     
-    -- Windows 特定链接库
-    if is_plat("windows") then
-        add_syslinks("shell32", "user32", "gdi32", "ole32", "oleaut32")
-        add_syslinks("winmm", "d3d11", "dwmapi", "windowsapp")
-        add_syslinks("OpenGL32")
-    end
-    add_frameworks("QtCore", "QtGui", "QtWidgets", "QtNetwork","QtMultimedia")
+--     -- Windows 特定链接库
+--     if is_plat("windows") then
+--         add_syslinks("shell32", "user32", "gdi32", "ole32", "oleaut32")
+--         add_syslinks("winmm", "d3d11", "dwmapi", "windowsapp")
+--         add_syslinks("OpenGL32")
+--     end
+--     add_frameworks("QtCore", "QtGui", "QtWidgets", "QtNetwork","QtMultimedia")
 
-target_end()
+-- target_end()

+ 1 - 36
libs/AvRecorder/audioinput.cpp

@@ -49,6 +49,7 @@
 ****************************************************************************/
 
 #include "audioinput.h"
+#include "ui/audio_render.h"
 
 #include <stdlib.h>
 #include <math.h>
@@ -185,42 +186,6 @@ qint64 AudioInfo::writeData(const char *data, qint64 len)
     return len;
 }
 
-RenderArea::RenderArea(QWidget *parent)
-    : QWidget(parent)
-{
-    setBackgroundRole(QPalette::Base);
-    setAutoFillBackground(true);
-
-    setMinimumHeight(30);
-    setMinimumWidth(200);
-}
-
-void RenderArea::paintEvent(QPaintEvent * /* event */)
-{
-    QPainter painter(this);
-
-    painter.setPen(Qt::black);
-    painter.drawRect(QRect(painter.viewport().left()+10,
-                           painter.viewport().top()+10,
-                           painter.viewport().right()-20,
-                           painter.viewport().bottom()-20));
-    if (m_level == 0.0)
-        return;
-
-    int pos = ((painter.viewport().right()-20)-(painter.viewport().left()+11))*m_level;
-    painter.fillRect(painter.viewport().left()+11,
-                     painter.viewport().top()+10,
-                     pos,
-                     painter.viewport().height()-21,
-                     Qt::red);
-}
-
-void RenderArea::setLevel(qreal value)
-{
-    m_level = value;
-    update();
-}
-
 
 InputTest::InputTest()
 {

+ 2 - 18
libs/AvRecorder/audioinput.h

@@ -62,6 +62,8 @@
 #include <QWidget>
 #include <QScopedPointer>
 
+class RenderArea;
+
 class AudioInfo : public QIODevice
 {
     Q_OBJECT
@@ -87,24 +89,6 @@ signals:
 };
 
 
-class RenderArea : public QWidget
-{
-    Q_OBJECT
-
-public:
-    explicit RenderArea(QWidget *parent = nullptr);
-
-    void setLevel(qreal value);
-
-protected:
-    void paintEvent(QPaintEvent *event) override;
-
-private:
-    qreal m_level = 0;
-    QPixmap m_pixmap;
-};
-
-
 class InputTest : public QMainWindow
 {
     Q_OBJECT

+ 4 - 1
libs/AvRecorder/capturer/audio/xmake.lua

@@ -3,7 +3,10 @@
 
 -- Audio Capturer 库
 target("audio_capturer")
-    add_rules("qt.shared")
+    add_rules("qt.static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     -- 源文件
     add_files("*.cpp")
     add_files("*.h")

+ 3 - 1
libs/AvRecorder/capturer/video/xmake.lua

@@ -4,7 +4,9 @@
 -- Video Capturer 库
 target("video_capturer")
 add_rules("qt.static")
-
+if is_plat("windows") then
+    add_defines("UNICODE", "_UNICODE")
+end
 
 -- 源文件
 add_files("*.cpp")

+ 4 - 2
libs/AvRecorder/capturer/xmake.lua

@@ -7,8 +7,11 @@ includes("audio")
 
 -- Capturer 库
 target("capturer_lib")
-    add_rules("qt.shared")
+    add_rules("qt.static")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
     -- 主要源文件
     add_files("finder.cpp")
@@ -21,7 +24,6 @@ target("capturer_lib")
     -- 包含目录
     add_includedirs("../", {public = true})
     add_includedirs(".", {public = true})
-    add_includedirs("finder", {public = true})
 
     
     -- FFmpeg 配置

+ 16 - 0
libs/AvRecorder/xmake.lua

@@ -8,6 +8,19 @@ includes("capturer")
 target("avrecorder_lib")
 -- Qt 配置
 add_rules("qt.static")
+if is_plat("windows") then
+    add_defines("UNICODE", "_UNICODE")
+end
+
+-- Qt MOC 处理
+add_files("ui/*.h")
+add_files("capturer/audio/*.h")
+add_files("*.h")
+
+-- 根目录源文件
+add_files("*.cpp")
+add_headerfiles("*.h")
+
 -- 基础模块源文件
 add_files("basic/*.cpp")
 add_headerfiles("basic/*.h")
@@ -62,6 +75,9 @@ target_end()
 target("AvRecorder")
 add_rules("qt.widgetapp")
 set_kind("binary")
+if is_plat("windows") then
+    add_defines("UNICODE", "_UNICODE")
+end
 
 -- 设置输出目录
 set_targetdir("$(projectdir)/bin")

+ 7 - 3
libs/advanceddockingsystem/xmake.lua

@@ -3,9 +3,12 @@
 
 -- AdvancedDockingSystem 库
 target("advanceddockingsystem")
-    set_kind("static")
-    add_rules("qt.shared")
+    add_rules("qt.static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
+    add_defines("BUILD_ADVANCEDDOCKINGSYSTEM_STATIC_LIB")
     -- 源文件
     add_files("*.cpp")
     add_files("linux/*.cpp")
@@ -18,7 +21,8 @@ target("advanceddockingsystem")
     add_includedirs(".", {public = true})
     
     -- Qt MOC 处理
-    add_files("./**/*.h", {rules = "qt.moc"})
+    add_files("*.h", {rules = "qt.moc"})
+    add_files("linux/*.h", {rules = "qt.moc"})
     add_files("resources.qrc")
     add_files("**.ui")
     -- 资源文件

+ 3 - 0
libs/fmt/xmake.lua

@@ -4,6 +4,9 @@
 -- fmt 库
 target("fmt")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
     -- 源文件
     add_files("src/format.cc")

+ 1 - 0
libs/jsonserializer/typeconverters/geomconverter_p.h

@@ -9,6 +9,7 @@
 #include <QtCore/QPoint>
 #include <QtCore/QLine>
 #include <QtCore/QRect>
+#include <variant>
 
 namespace QtJsonSerializer::TypeConverters {
 

+ 1 - 0
libs/jsonserializer/typeconverters/stdchronodurationconverter_p.h

@@ -6,6 +6,7 @@
 #include "exception.h"
 
 #include <chrono>
+#include <variant>
 
 namespace QtJsonSerializer::TypeConverters {
 

+ 7 - 4
libs/jsonserializer/xmake.lua

@@ -4,7 +4,11 @@
 -- JsonSerializer 库
 target("jsonserializer")
     set_kind("static")
-    
+        -- C++17 标准
+    set_languages("c++17")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     -- 源文件
     add_files("*.cpp")
     add_files("qjsonconverterreg/*.cpp")
@@ -23,13 +27,12 @@ target("jsonserializer")
     add_includedirs("..", {public = true})
     
     -- Qt 配置
-    add_rules("qt.shared")
+    add_rules("qt.static")
     
     -- Qt MOC 处理
     add_files("./**/*.h", {rules = "qt.moc"})
     
-    -- C++17 标准
-    set_languages("c++17")
+
     
     -- 编译选项
     if is_plat("windows") then

+ 4 - 1
libs/qtpromise/xmake.lua

@@ -4,6 +4,9 @@
 -- QtPromise 库
 target("qtpromise")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
     -- 源文件
 --    add_files("src/qtpromise/*.cpp")
@@ -16,7 +19,7 @@ target("qtpromise")
     add_includedirs("src", {public = true})
     
     -- Qt 配置
-    add_rules("qt.shared")
+    add_rules("qt.static")
     
     -- Qt MOC 处理
     add_files("src/qtpromise/*.h", {rules = "qt.moc"})

+ 1 - 0
libs/qwindowkit/src/core/contexts/win32windowcontext.cpp

@@ -32,6 +32,7 @@
 
 #include <core/qwkglobal_p.h>
 #include <core/shared/qwkwindowsextra_p.h>
+#include <shellapi.h>
 
 #if (QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)) && (QT_VERSION <= QT_VERSION_CHECK(6, 6, 1))
 #  error Current Qt version has a critical bug which will break QWK functionality. Please upgrade to > 6.6.1 or downgrade to < 6.6.0

+ 1 - 0
libs/qwindowkit/src/core/qwindowkit_windows.cpp

@@ -3,6 +3,7 @@
 // SPDX-License-Identifier: Apache-2.0
 
 #include "qwindowkit_windows.h"
+#include <winternl.h>
 
 namespace QWK {
 

+ 24 - 6
libs/qwindowkit/xmake.lua

@@ -1,9 +1,9 @@
--- QWindowKit 第三方库配置
--- 此文件被主项目通过 includes("qwindowkit") 引入
-
 -- QWindowKit 库
 target("qwindowkit")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
     -- 源文件
     add_defines("QWK_CORE_STATIC","QWK_WIDGETS_STATIC", {public = true})
@@ -55,11 +55,10 @@ target("qwindowkit")
     --# add_files("src/widgets/widgetwindowagent_mac.cpp")
     add_files("src/widgets/widgetwindowagent_win.cpp")
     -- 包含目录
-    add_includedirs("include", {public = true})
     add_includedirs("src", {public = true})
     
     -- Qt 配置
-    add_rules("qt.shared")
+    add_rules("qt.static")
     
     -- Qt MOC 处理
 --    add_files("src/**/*.h", {rules = "qt.moc"})
@@ -75,5 +74,24 @@ target("qwindowkit")
     else
         add_cxflags("-Wall", "-Wextra")
     end
-    
+    add_frameworks("QtCore", "QtGui", "QtWidgets")
 target_end()
+
+target("qwindowkit_widgets")
+    add_rules("qt.static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
+  
+    add_includedirs("examples/shared", {public = true})
+    add_files("examples/shared/widgetframe/windowbar.h")
+    add_files("examples/shared/widgetframe/windowbar_p.h")
+    add_files("examples/shared/widgetframe/windowbutton.h")
+    add_files("examples/shared/widgetframe/windowbutton_p.h")
+
+    add_files("examples/shared/widgetframe/windowbar.cpp")
+    add_files("examples/shared/widgetframe/windowbutton.cpp")
+
+    add_frameworks("QtCore", "QtGui", "QtWidgets")
+target_end()
+

+ 5 - 2
libs/utils/xmake.lua

@@ -4,13 +4,16 @@
 -- Utils 库
 target("utils_lib")
 -- Qt 配置
-    add_rules("qt.shared")
+    add_rules("qt.static")
 --    set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
     -- 源文件
     add_files("*.cpp")
     
-    add_defines("UTILS_STATIC_LIBRARY")
+    add_defines("UTILS_STATIC_LIBRARY", {public = true})
     -- 头文件
     add_headerfiles("*.h")
     

+ 12 - 0
libs/xmake.lua

@@ -0,0 +1,12 @@
+-- 包含子模块配置
+includes("fmt")
+includes("qtpromise")
+includes("qwindowkit")
+includes("jsonserializer")
+includes("advanceddockingsystem")
+
+-- 核心功能模块
+-- includes("AV")  -- 暂时不使用AV模块
+includes("AvRecorder")
+includes("AvPlayer2")
+includes("utils")

+ 7 - 3
network/xmake.lua

@@ -3,7 +3,10 @@
 
 -- Network 库
 target("network_lib")
-    set_kind("static")
+    add_rules("qt.static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
     -- 所有源文件
     add_files("*.cpp")
@@ -13,7 +16,7 @@ target("network_lib")
     add_includedirs(".", {public = true})
     add_includedirs("..", {public = true})
     -- Qt 配置
-    add_rules("qt.shared")
+    
     
     -- Qt MOC 处理
     add_files("*.h", {rules = "qt.moc"})
@@ -22,5 +25,6 @@ target("network_lib")
     if is_plat("windows") then
         add_syslinks("ws2_32", "wininet", "user32", "gdi32", "ole32")
     end
-    add_frameworks("QtCore", "QtGui", "QtWidgets", "QtNetwork", "QtMultimedia", "QtWebSockets")
+    add_frameworks("QtConcurrent", {public = true})
+    add_frameworks("QtCore", "QtGui", "QtWidgets", "QtNetwork", "QtMultimedia", "QtWebSockets", {public = true})
 target_end()

+ 3 - 0
util/xmake.lua

@@ -4,6 +4,9 @@
 -- Util 库
 target("util_lib")
     set_kind("static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
     -- 所有源文件
     add_files("*.cpp")

+ 5 - 4
views/xmake.lua

@@ -3,7 +3,10 @@
 
 -- Views 库
 target("views_lib")
-    set_kind("static")
+    add_rules("qt.static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
     -- 所有源文件
     add_files("*.cpp")
@@ -13,9 +16,7 @@ target("views_lib")
     add_includedirs("..", {public = true})
     add_includedirs(".", {public = true})
     
-    -- Qt 配置
-    add_rules("qt.shared")
-    
+  
     -- Qt MOC 处理
     add_files("*.h", {rules = "qt.moc"})
     

+ 1 - 0
widgets/chatView/chatwindow.h

@@ -14,6 +14,7 @@ class ChatView;
 
 class ChatWindow : public QWidget
 {
+    Q_OBJECT
 public:
     ChatWindow(WebSocketClient *webSocketClient, QWidget *parent = nullptr);
 

+ 3 - 2
widgets/chatView/independentchatwindow.cpp

@@ -1,7 +1,8 @@
 #include "independentchatwindow.h"
 #include "chatwindow.h"
-#include "qwindowkit/examples/shared/widgetframe/windowbar.h"
-#include "qwindowkit/examples/shared/widgetframe/windowbutton.h"
+
+#include "widgetframe/windowbar.h"
+#include "widgetframe/windowbutton.h"
 
 #include <QVBoxLayout>
 #include <QHBoxLayout>

+ 13 - 7
widgets/xmake.lua

@@ -3,25 +3,31 @@
 
 -- Widgets 库
 target("widgets_lib")
-    set_kind("static")
+    add_rules("qt.static")
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     
     -- 所有源文件
+    add_files("chatView/*.cpp")
+    add_files("chatView/chat1/*.cpp")
     add_files("*.cpp")
     add_headerfiles("*.h")
     
     -- 包含目录
     add_includedirs(".", {public = true})
-    
-    -- Qt 配置
-    add_rules("qt.shared")
-    
+    add_includedirs("..")
+  
+    add_deps("qwindowkit_widgets")
+    add_deps("qwindowkit")
     -- Qt MOC 处理
     add_files("*.h", {rules = "qt.moc"})
-    
+    add_files("chatView/*.h", {rules = "qt.moc"})
+    add_files("chatView/chat1/*.h", {rules = "qt.moc"})
     -- Windows 特定链接库
     if is_plat("windows") then
         add_syslinks("user32", "gdi32", "ole32", "shell32")
         add_syslinks("OpenGL32", "d3d11", "dwmapi")
     end
-    add_frameworks("QtCore", "QtGui", "QtWidgets", "QtNetwork", "QtMultimedia")
+    add_frameworks("QtCore", "QtGui", "QtWidgets", "QtNetwork", "QtMultimedia", "QtWinExtras", "QtWebSockets")
 target_end()

+ 15 - 19
xmake.lua

@@ -36,8 +36,8 @@ end
 
 -- 全局 Qt 配置函数(用于静态库)
 function add_qt_config()
-    add_rules("qt.shared")
-    add_frameworks("QtCore", "QtGui", "QtWidgets", "QtNetwork")
+    add_rules("qt.static")
+    add_frameworks("QtCore", "QtGui", "QtWidgets", "QtNetwork", "QtWebSockets")
     add_frameworks("QtMultimedia", "QtWebSockets", "QtSvg", "QtXml")
     add_frameworks("QtOpenGL", "QtConcurrent")
     if is_plat("windows") then
@@ -46,22 +46,11 @@ function add_qt_config()
 end
 
 -- 使用 includes 引入子模块配置 <mcreference link="https://xmake.io/zh/api/description/global-interfaces.html#includes" index="0">0</mcreference>
--- 包含子模块配置
-includes("fmt")
-includes("qtpromise")
-includes("qwindowkit")
-includes("jsonserializer")
-includes("advanceddockingsystem")
 
--- 核心功能模块
--- includes("AV")  -- 暂时不使用AV模块
-includes("AvRecorder")
-includes("AvPlayer2")
-includes("utils")
+includes("libs")
 
 -- 应用程序模块
 includes("api")
-includes("models")
 includes("network")
 includes("views")
 includes("widgets")
@@ -70,7 +59,9 @@ includes("widgets")
 target("LearningSmartClient")
     add_rules("qt.widgetapp")
     set_kind("binary")
-    
+    if is_plat("windows") then
+        add_defines("UNICODE", "_UNICODE")
+    end
     -- 设置输出目录
     set_targetdir("$(projectdir)/bin")
     if is_mode("debug") then
@@ -95,8 +86,13 @@ target("LearningSmartClient")
     add_headerfiles("themesettingswidget.h")
     add_headerfiles("tlogger.h")
     
-    -- Qt MOC 处理
-    add_files("*.h", {rules = "qt.moc"})
+    -- Qt MOC 处理 - 只处理主项目的头文件
+    add_files("mainwindow.h", {rules = "qt.moc"})
+    add_files("MainPanel.h", {rules = "qt.moc"})
+    add_files("appevent.h", {rules = "qt.moc"})
+    add_files("thememanager.h", {rules = "qt.moc"})
+    add_files("themesettingswidget.h", {rules = "qt.moc"})
+    add_files("tlogger.h", {rules = "qt.moc"})
     
     -- 资源文件
     add_files("resources/shared.qrc")
@@ -107,14 +103,13 @@ target("LearningSmartClient")
     add_deps("avplayer2_lib")
     add_deps("utils_lib")
     add_deps("api_lib")
-    add_deps("models_lib")
     add_deps("network_lib")
     add_deps("views_lib")
     add_deps("widgets_lib")
     
     -- 第三方库依赖
     add_deps("fmt", "qtpromise", "qwindowkit", "jsonserializer", "advanceddockingsystem")
-    
+    add_deps("qwindowkit_widgets")
     -- Qt 配置
     add_qt_config()
     
@@ -131,6 +126,7 @@ target("LearningSmartClient")
     -- 包含目录
     add_includedirs(".")
     add_includedirs("thardware")
+    add_files("thardware/*.cpp")
     
 target_end()