Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Commit c994a8e

Browse files
committed
111
1 parent f629b2c commit c994a8e

File tree

8 files changed

+596
-275
lines changed

8 files changed

+596
-275
lines changed

CMakeLists.txt

Lines changed: 3 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,7 @@
11
cmake_minimum_required(VERSION 3.18)
22

3-
add_compile_definitions(QT_DISABLE_DEPRECATED_BEFORE=0x050F00)
4-
5-
# add_compile_options(/Zc:__cplusplus /permissive- /W4)
6-
7-
set(CMAKE_AUTOMOC ON)
8-
set(CMAKE_AUTORCC ON)
9-
set(CMAKE_AUTOUIC ON)
10-
11-
12-
set(PROJECT_NAME UniDeskCppExt)
13-
set(MODULE_VERSION_MAJOR 0)
14-
set(MODULE_VERSION_MINOR 0)
15-
set(MODULE_VERSION_PATCH 1)
16-
set(MODULE_VERSION ${MODULE_VERSION_MAJOR}.${MODULE_VERSION_MINOR}.${MODULE_VERSION_PATCH})
17-
set(TARGET ${PROJECT_NAME}${MODULE_VERSION_MAJOR})
18-
19-
# Set this to allow indexing when we are using Qt Creator
20-
set(QML_IMPORT_PATH ${CMAKE_BINARY_DIR}/temp CACHE STRING "" FORCE)
21-
22-
project(${PROJECT_NAME} VERSION ${MODULE_VERSION})
23-
24-
option(BUILD_PYTHON "Build Python bindings" OFF)
25-
26-
set(CMAKE_INCLUDE_CURRENT_DIR ON)
27-
set(CMAKE_CXX_STANDARD 17)
28-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
29-
30-
31-
set(QT_DEFAULT_MAJOR_VERSION 6)
32-
set(REQUIRED_QT_VERSION 6.5.0)
33-
34-
find_package(ECM REQUIRED NO_MODULE)
35-
36-
list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
37-
message(STATUS "ECM version: ${ECM_VERSION}")
38-
39-
40-
41-
if (UNIX)
42-
if (NOT APPLE)
43-
list(APPEND QT GuiPrivate)
44-
find_package(KF6WindowSystem )
45-
# If not found, warn and continue
46-
if (NOT KF6WindowSystem_FOUND)
47-
message(WARNING "KF6WindowSystem not found. Some features may not work.")
48-
endif ()
49-
endif ()
50-
endif ()
51-
52-
# Set Qt Policy
53-
if(QT_KNOWN_POLICY_QTP0004)
54-
qt_policy(SET QTP0004 NEW)
55-
endif()
56-
57-
58-
59-
# Get the installation directory from qmake
60-
if(ECM_VERSION VERSION_LESS 5.93.0)
61-
include(ECMQueryQmake)
62-
query_qmake(INSTALL_QMLDIR QT_INSTALL_QML)
63-
else()
64-
include(ECMQueryQt)
65-
ecm_query_qt(INSTALL_QMLDIR QT_INSTALL_QML)
66-
endif()
67-
68-
# Handle Python build status
69-
if (BUILD_PYTHON)
70-
message(STATUS "Python bindings will be built")
71-
set(INSTALL_QMLDIR ${CMAKE_INSTALL_PREFIX}/qml)
72-
set(CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/${TARGET}")
73-
endif ()
74-
75-
if (INSTALL_QMLDIR)
76-
message(STATUS "QML directory:" "${INSTALL_QMLDIR}")
77-
else ()
78-
message(FATAL_ERROR "QML directory cannot be detected.")
79-
endif ()
80-
81-
# Install
82-
if (_VCPKG_INSTALLED_DIR)
83-
set(CMAKECONFIG_INSTALL_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/share/${TARGET}")
84-
set(CMAKE_INSTALL_PREFIX "${_VCPKG_INSTALLED_DIR}")
85-
else ()
86-
set(CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${TARGET}")
87-
endif ()
88-
89-
message(STATUS "CMake Config install directory:" "${CMAKECONFIG_INSTALL_DIR}")
90-
91-
923

4+
project(UniDeskCppExt)
5+
message(STATUS "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}")
936
add_subdirectory(src)
94-
95-
add_subdirectory(bindings)
96-
97-
98-
99-
100-
# EXAMPLE_VERSION_INFO is defined by setup.py and passed into the C++ code as a
101-
# define (VERSION_INFO) here.
102-
103-
7+
add_subdirectory(bindings)

UniDeskCppExt/UDFrameless.pyi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import UniDeskCppExt.UDFrameless
2+
3+
def setWindowEffect(hwnd: int, key: int, enable: bool) -> None: ...

UniDeskCppExt/__init__.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
import udcpptools
1+
import UniDeskCppExt.UDFrameless as UDFrameless

UniDeskCppExt/udcpptools.pyi

Lines changed: 0 additions & 7 deletions
This file was deleted.

bindings/BUDFrameless.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
#include<pybind11/pybind11.h>
33
namespace py=pybind11;
44

5-
PYBIND11_MODULE(UDFrameless,m){
6-
m.doc()="11111";
7-
// m.def("setWindowEffect",&setWindowEffect,py::arg("hwnd"),py::arg("key"),py::arg("enable"));
5+
PYBIND11_MODULE(UDFrameless, mod) {
6+
mod.doc() = "cxxtestpy module";
7+
mod.def("setWindowEffect",&setWindowEffect,py::arg("hwnd"),py::arg("key"),py::arg("enable"));
8+
9+
// mod.def("handle", &FooApi::instance);
810
}

bindings/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cmake_minimum_required(VERSION 3.18)
22

3-
project(${PROJECT_NAME} VERSION ${MODULE_VERSION})
3+
project(UniDeskCppExt)
44

55
set (CMAKE_CXX_STANDARD 17)
66

@@ -9,4 +9,4 @@ add_subdirectory(pybind11)
99

1010
# create bindings
1111
pybind11_add_module(UDFrameless BUDFrameless.cpp)
12-
target_link_libraries(UDFrameless PRIVATE ${TARGET})
12+
target_link_libraries(UDFrameless PRIVATE unideskcppext)

src/CMakeLists.txt

Lines changed: 9 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -1,128 +1,13 @@
1-
project(${PROJECT_NAME} VERSION ${MODULE_VERSION})
1+
project(UniDeskCppExt)
22

3-
set(CMAKE_CXX_STANDARD 17)
3+
set (CMAKE_CXX_STANDARD 17)
44

5-
add_compile_options(/Zc:__cplusplus /permissive- /W4)
6-
# message(STATUS "Creating target: ${TARGET}")
5+
# add_compile_options(/Zc:__cplusplus /permissive- /W4)
6+
# find Qt
7+
find_package(Qt6 COMPONENTS Core Widgets Quick QuickControls2 DBus Core5Compat Gui Qml REQUIRED)
78

8-
set(QT Core Widgets Quick Qml QuickControls2 DBus Core5Compat)
9-
find_package(Qt6 ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS ${QT})
9+
# create the library
10+
add_library(unideskcppext STATIC singleton.h stdafx.h UDFrameless.h UDFrameless.cpp UDTools.h UDTools.cpp )
11+
target_link_libraries(unideskcppext PUBLIC Qt6::Core Qt6::Widgets Qt6::Quick Qt6::QuickControls2 Qt6::DBus Qt6::Core5Compat Qt6::Gui Qt6::Qml)
12+
target_include_directories(unideskcppext PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
1013

11-
if (UNIX)
12-
if (NOT APPLE)
13-
target_link_libraries(${TARGET} PRIVATE Qt6::Gui Qt6::GuiPrivate)
14-
if (KF6WindowSystem_FOUND)
15-
target_link_libraries(${TARGET} PRIVATE KF6::WindowSystem)
16-
endif ()
17-
endif ()
18-
endif ()
19-
20-
# Clear the list of source files
21-
set(sources_files "")
22-
set(qml_files "")
23-
set(resource_files "")
24-
25-
#遍历所有Cpp文件
26-
file(GLOB CPP_FILES *.cpp)
27-
foreach (filepath ${CPP_FILES})
28-
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
29-
list(APPEND sources_files ${filename})
30-
endforeach (filepath)
31-
32-
#遍历所有h文件
33-
file(GLOB H_FILES *.h)
34-
foreach (filepath ${H_FILES})
35-
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
36-
list(APPEND sources_files ${filename})
37-
endforeach (filepath)
38-
39-
# set(SINGLETON_FILES "Controls/LingmoRouter.qml" "Controls/LingmoUnits.qml")
40-
41-
#遍历所有qml文件
42-
file(GLOB_RECURSE QML_PATHS Controls/*.qml Controls/*.qml qmldir)
43-
foreach (filepath ${QML_PATHS})
44-
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
45-
if (${filename} MATCHES "qmldir")
46-
list(APPEND resource_files ${filename})
47-
else ()
48-
list(APPEND qml_files ${filename})
49-
# Check for singleton
50-
foreach (singletion_name ${SINGLETON_FILES})
51-
if (${filename} MATCHES ${singletion_name})
52-
set_source_files_properties(${filename} PROPERTIES QT_QML_SINGLETON_TYPE true)
53-
endif ()
54-
endforeach (singletion_name)
55-
endif ()
56-
endforeach (filepath)
57-
58-
#遍历所有资源文件
59-
set(RES_SUFFIX "")
60-
set(RES_PATHS "")
61-
list(APPEND RES_SUFFIX *.png *.jpg *.svg *.ico *.ttf *.webp *.js *.qm *.qsb)
62-
list(APPEND RES_PATHS Controls Font Image)
63-
foreach (respath ${RES_PATHS})
64-
foreach (filesuffix ${RES_SUFFIX})
65-
file(GLOB_RECURSE RES_FOUND ${respath}/${filesuffix})
66-
foreach (filepath ${RES_FOUND})
67-
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
68-
list(APPEND resource_files ${filename})
69-
endforeach()
70-
endforeach ()
71-
endforeach (respath)
72-
73-
74-
# QHotkey
75-
option(QHOTKEY_INSTALL OFF)
76-
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/QHotkey)
77-
set(QHOTKEY_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/QHotkey/QHotkey)
78-
79-
include(GenerateExportHeader)
80-
include(GNUInstallDirs)
81-
include(CMakePackageConfigHelpers)
82-
include(ECMGenerateHeaders)
83-
84-
# # Set Qt6 QMl Plugins
85-
# qt_add_qml_module(${TARGET}
86-
# PLUGIN_TARGET ${TARGET}
87-
# OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/temp/${PROJECT_NAME}
88-
# VERSION ${MODULE_VERSION_MAJOR}.${MODULE_VERSION_MINOR}
89-
# URI ${PROJECT_NAME}
90-
# TYPEINFO "plugins.qmltypes"
91-
# SOURCES ${sources_files}
92-
# QML_FILES ${qml_files}
93-
# RESOURCES ${resource_files}
94-
# RESOURCE_PREFIX "/lingmoui/kit"
95-
# )
96-
add_library(${TARGET} STATIC
97-
${sources_files}
98-
${qml_files}
99-
${resource_files}
100-
)
101-
102-
target_link_libraries(${TARGET}
103-
PUBLIC
104-
Qt6::Core
105-
Qt6::Gui
106-
Qt6::DBus
107-
Qt6::Widgets
108-
Qt6::Qml
109-
Qt6::Quick
110-
Qt6::QuickControls2
111-
Qt6::GuiPrivate
112-
Qt6::Core5Compat
113-
QHotkey::QHotkey
114-
)
115-
target_include_directories(${TARGET} PRIVATE ${QHOTKEY_INCLUDE_DIR} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
116-
117-
set_target_properties(${TARGET}
118-
PROPERTIES VERSION ${MODULE_VERSION} SOVERSION ${MODULE_VERSION_MAJOR})
119-
120-
# add_subdirectory(GraphicalEffects)
121-
122-
# install(DIRECTORY ${CMAKE_BINARY_DIR}/temp/${PROJECT_NAME} DESTINATION ${INSTALL_QMLDIR})
123-
# generate_export_header(${TARGET} BASE_NAME ${TARGET})
124-
125-
# install(TARGETS ${TARGET} EXPORT ${TARGET}Targets DESTINATION ${INSTALL_QMLDIR}/${PROJECT_NAME})
126-
127-
# # Install Header
128-
# install(FILES ${H_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TARGET})

0 commit comments

Comments
 (0)