From 5e12d4d4f27e4ce27a8c9e6145bc6e45840e00f2 Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周日, 17 12月 2023 15:11:48 +0800 Subject: [PATCH] Add qmake and msbuild config files --- /dev/null | 0 share/qmake/QWKCore.pri.in | 23 +++++ share/qmake/QWKQuick.pri.in | 11 ++ share/qmake/QWKStyleSupport.pri.in | 11 ++ src/CMakeLists.txt | 4 src/quick/quickwindowagent_win.cpp | 3 share/msbuild/QWindowKit.props.in | 18 ++++ share/qmake/QWKWidgets.pri.in | 11 ++ README.md | 46 +++++++++++ share/install.cmake | 86 +++++++++++++++++++++ 10 files changed, 206 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index cef2f0f..5b9b809 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,50 @@ + [qmsetup](https://github.com/stdware/qmsetup) +## Integrate + +### Build & Install + +```sh +cmake -B build \ + -Dqmsetup_DIR=<dir> \ # Optional + -DCMAKE_INSTALL_PREFIX=/path/install \ + -G "Ninja Multi-Config" + +cmake --build build --target install --config Debug +cmake --build build --target install --config Release +``` + +You can also include this directory as a sub-project if you choose CMake as your build system. + +For other build systems, you need to install with CMake first and include the corresponding configuration files in your project. + +### Import + +#### CMake Project + +```cmake +cmake -B build -DQWindowKit_DIR=/path/install/cmake/QWindowKit +``` +```cmake +find_package(QWindowKit REQUIRED) +taraget_link_libraries(widgets_app PUBLIC QWindowKit::Widgets) +taraget_link_libraries(quick_app PUBLIC QWindowKit::Quick) +``` + +#### QMake Project +```qmake +# WidgetsApp.pro +include("/path/install/share/QWindowKit/qmake/QWKWidgets.pri") + +# QuickApp.pro +include("/path/install/share/QWindowKit/qmake/QWKQuick.pri") +``` + +#### Visual Studio Project + +TODO + ## Quick Start ### Initialization @@ -41,7 +85,7 @@ ```c++ int main(int argc, char *argv[]) { #ifdef Q_OS_WINDOWS - qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); + QCoreApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); #elif defined(Q_OS_MAC) # if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) qputenv("QT_MAC_WANTS_LAYER", "1"); diff --git a/share/install.cmake b/share/install.cmake new file mode 100644 index 0000000..cb4aec1 --- /dev/null +++ b/share/install.cmake @@ -0,0 +1,86 @@ +set(_build_data_dir ${CMAKE_CURRENT_BINARY_DIR}/../etc/share) + +# Install qmake files +if(TRUE) + set(_qmake_install_dir "${CMAKE_INSTALL_DATADIR}/QWindowKit/qmake") + set(_qmake_build_dir ${_build_data_dir}/${_qmake_install_dir}) + file(RELATIVE_PATH _qmake_install_prefix + "${CMAKE_INSTALL_PREFIX}/${_qmake_install_dir}" + "${CMAKE_INSTALL_PREFIX}" + ) + string(REGEX REPLACE "/$" "" _qmake_install_prefix "${_qmake_install_prefix}") + + set(QMAKE_QWK_INSTALL_PREFIX "\$\$PWD/${_qmake_install_prefix}") + set(QMAKE_QWK_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR}) + set(QMAKE_QWK_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) + set(QMAKE_QWK_INSTALL_INCDIR ${CMAKE_INSTALL_INCLUDEDIR}) + + set(QMAKE_QWK_CORE_NAME_RELEASE QWKCore) + set(QMAKE_QWK_WIDGETS_NAME_RELEASE QWKWidgets) + set(QMAKE_QWK_QUICK_NAME_RELEASE QWKQuick) + set(QMAKE_QWK_STYLESUPPORT_NAME_RELEASE QWKStyleSupport) + + set(QMAKE_QWK_CORE_NAME_DEBUG QWKCore${CMAKE_DEBUG_POSTFIX}) + set(QMAKE_QWK_WIDGETS_NAME_DEBUG QWKWidgets${CMAKE_DEBUG_POSTFIX}) + set(QMAKE_QWK_QUICK_NAME_DEBUG QWKQuick${CMAKE_DEBUG_POSTFIX}) + set(QMAKE_QWK_STYLESUPPORT_NAME_DEBUG QWKStyleSupport${CMAKE_DEBUG_POSTFIX}) + + file(GLOB _qmake_components "${CMAKE_CURRENT_LIST_DIR}/qmake/*.pri.in") + + foreach(_item IN LISTS _qmake_components) + get_filename_component(_name ${_item} NAME_WLE) + configure_file(${_item} ${_build_data_dir}/qmake/${_name} @ONLY) + endforeach() + + install(DIRECTORY ${_build_data_dir}/qmake/ + DESTINATION ${_qmake_install_dir} + ) +endif() + +# Install msbuild files +if(MSVC) + macro(to_dos_separator _var) + string(REPLACE "/" "\\" ${_var} ${${_var}}) + endmacro() + + set(_msbuild_install_dir "${CMAKE_INSTALL_DATADIR}/QWindowKit/msbuild") + set(_msbuild_build_dir ${_build_data_dir}/${_msbuild_install_dir}) + file(RELATIVE_PATH _msbuild_install_prefix + "${CMAKE_INSTALL_PREFIX}/${_msbuild_install_dir}" + "${CMAKE_INSTALL_PREFIX}" + ) + string(REGEX REPLACE "/$" "" _msbuild_install_prefix "${_msbuild_install_prefix}") + + set(MSBUILD_QWK_INSTALL_PREFIX "\$(MSBuildThisFileDirectory)${_msbuild_install_prefix}") + set(MSBUILD_QWK_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR}) + set(MSBUILD_QWK_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) + set(MSBUILD_QWK_INSTALL_INCDIR ${CMAKE_INSTALL_INCLUDEDIR}) + + set(MSBUILD_QWK_LIBRARY_LIST_DEBUG + QWKCore${CMAKE_DEBUG_POSTFIX}.lib + QWKWidgets${CMAKE_DEBUG_POSTFIX}.lib + QWKQuick${CMAKE_DEBUG_POSTFIX}.lib + QWKStyleSupport${CMAKE_DEBUG_POSTFIX}.lib + ) + + set(MSBUILD_QWK_LIBRARY_LIST_RELEASE + QWKCore.lib + QWKWidgets.lib + QWKQuick.lib + QWKStyleSupport.lib + ) + + to_dos_separator(MSBUILD_QWK_INSTALL_PREFIX) + to_dos_separator(MSBUILD_QWK_INSTALL_BINDIR) + to_dos_separator(MSBUILD_QWK_INSTALL_LIBDIR) + to_dos_separator(MSBUILD_QWK_INSTALL_INCDIR) + + configure_file(${CMAKE_CURRENT_LIST_DIR}/msbuild/QWindowKit.props.in + ${_build_data_dir}/msbuild/QWindowKit.props + @ONLY + ) + + install(DIRECTORY ${_build_data_dir}/msbuild/ + DESTINATION ${_msbuild_install_dir} + ) +endif() \ No newline at end of file diff --git a/share/msbuild/.gitkeep b/share/msbuild/.gitkeep deleted file mode 100644 index e69de29..0000000 --- a/share/msbuild/.gitkeep +++ /dev/null diff --git a/share/msbuild/QWindowKit.props.in b/share/msbuild/QWindowKit.props.in new file mode 100644 index 0000000..2a7e619 --- /dev/null +++ b/share/msbuild/QWindowKit.props.in @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <LibraryPath>@MSBUILD_QWK_INSTALL_PREFIX@\@MSBUILD_QWK_INSTALL_LIBDIR@;$(LibraryPath)</LibraryPath> + </PropertyGroup> + <PropertyGroup Label="QtSettings"> + <QtHeaderSearchPath>@MSBUILD_QWK_INSTALL_PREFIX@\@MSBUILD_QWK_INSTALL_INCDIR@;$(QtHeaderSearchPath)</QtHeaderSearchPath> + </PropertyGroup> + <ItemDefinitionGroup> + <ClCompile> + <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + <Link> + <AdditionalDependencies Condition="'$(Configuration)'=='Debug'">@MSBUILD_QWK_LIBRARY_LIST_DEBUG@;%(AdditionalDependencies);</AdditionalDependencies> + <AdditionalDependencies Condition="'$(Configuration)'=='Release'">@MSBUILD_QWK_LIBRARY_LIST_RELEASE@;%(AdditionalDependencies);</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> +</Project> diff --git a/share/qmake/.gitkeep b/share/qmake/.gitkeep deleted file mode 100644 index e69de29..0000000 --- a/share/qmake/.gitkeep +++ /dev/null diff --git a/share/qmake/QWKCore.pri.in b/share/qmake/QWKCore.pri.in new file mode 100644 index 0000000..a07cd80 --- /dev/null +++ b/share/qmake/QWKCore.pri.in @@ -0,0 +1,23 @@ +!defined(QMAKE_QWK_CORE_INCLUDED, var) { + QMAKE_QWK_CORE_INCLUDED = 1 + + # CMake variables + QMAKE_QWK_INSTALL_PREFIX = @QMAKE_QWK_INSTALL_PREFIX@ + QMAKE_QWK_INSTALL_BINDIR = @QMAKE_QWK_INSTALL_BINDIR@ + QMAKE_QWK_INSTALL_LIBDIR = @QMAKE_QWK_INSTALL_LIBDIR@ + QMAKE_QWK_INSTALL_INCDIR = @QMAKE_QWK_INSTALL_INCDIR@ + + # Shared include directory + INCLUDEPATH += \ + $$QMAKE_QWK_INSTALL_PREFIX/$$QMAKE_QWK_INSTALL_INCDIR/QWindowKit + + # Shared link directory + LIBS += \ + "-L$$QMAKE_QWK_INSTALL_PREFIX/$$QMAKE_QWK_INSTALL_LIBDIR" + + CONFIG(debug, debug|release) { + LIBS += -l@QMAKE_QWK_CORE_NAME_DEBUG@ + } else { + LIBS += -l@QMAKE_QWK_CORE_NAME_RELEASE@ + } +} \ No newline at end of file diff --git a/share/qmake/QWKQuick.pri.in b/share/qmake/QWKQuick.pri.in new file mode 100644 index 0000000..4c6bdd1 --- /dev/null +++ b/share/qmake/QWKQuick.pri.in @@ -0,0 +1,11 @@ +!defined(QMAKE_QWK_QUICK_INCLUDED, var) { + QMAKE_QWK_QUICK_INCLUDED = 1 + + include($$PWD/QWKCore.pri) + + CONFIG(debug, debug|release) { + LIBS += -l@QMAKE_QWK_QUICK_NAME_DEBUG@ + } else { + LIBS += -l@QMAKE_QWK_QUICK_NAME_RELEASE@ + } +} \ No newline at end of file diff --git a/share/qmake/QWKStyleSupport.pri.in b/share/qmake/QWKStyleSupport.pri.in new file mode 100644 index 0000000..0e7be64 --- /dev/null +++ b/share/qmake/QWKStyleSupport.pri.in @@ -0,0 +1,11 @@ +!defined(QMAKE_QWK_STYLESUPPORT_INCLUDED, var) { + QMAKE_QWK_STYLESUPPORT_INCLUDED = 1 + + include($$PWD/QWKCore.pri) + + CONFIG(debug, debug|release) { + LIBS += -l@QMAKE_QWK_STYLESUPPORT_NAME_DEBUG@ + } else { + LIBS += -l@QMAKE_QWK_STYLESUPPORT_NAME_RELEASE@ + } +} \ No newline at end of file diff --git a/share/qmake/QWKWidgets.pri.in b/share/qmake/QWKWidgets.pri.in new file mode 100644 index 0000000..ca76273 --- /dev/null +++ b/share/qmake/QWKWidgets.pri.in @@ -0,0 +1,11 @@ +!defined(QMAKE_QWK_WIDGETS_INCLUDED, var) { + QMAKE_QWK_WIDGETS_INCLUDED = 1 + + include($$PWD/QWKCore.pri) + + CONFIG(debug, debug|release) { + LIBS += -l@QMAKE_QWK_WIDGETS_NAME_DEBUG@ + } else { + LIBS += -l@QMAKE_QWK_WIDGETS_NAME_RELEASE@ + } +} \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4c6bd44..25d290a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -208,7 +208,5 @@ ) # Install shared files - install(DIRECTORY ../share/ - DESTINATION share/${QWINDOWKIT_INSTALL_NAME} - ) + include("../share/install.cmake") endif() \ No newline at end of file diff --git a/src/quick/quickwindowagent_win.cpp b/src/quick/quickwindowagent_win.cpp index cfc3eb1..0d7fe92 100644 --- a/src/quick/quickwindowagent_win.cpp +++ b/src/quick/quickwindowagent_win.cpp @@ -8,7 +8,6 @@ namespace QWK { class BorderItem : public QQuickPaintedItem, public NativeEventFilter { - Q_OBJECT public: explicit BorderItem(QQuickItem *parent, AbstractWindowContext *context); ~BorderItem() override; @@ -120,5 +119,3 @@ } } - -#include "quickwindowagent_win.moc" -- Gitblit v1.9.1