{"id":16156392,"url":"https://github.com/kanglin/calendar","last_synced_at":"2026-05-28T05:01:16.245Z","repository":{"id":65683204,"uuid":"168494175","full_name":"KangLin/Calendar","owner":"KangLin","description":":cn: Task, calendar, Vision protection","archived":false,"fork":false,"pushed_at":"2026-05-21T08:52:09.000Z","size":3651,"stargazers_count":15,"open_issues_count":0,"forks_count":9,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-05-21T16:12:16.992Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KangLin.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":".github/FUNDING.yml","license":"License.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"Authors.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://github.com/KangLin/RabbitCommon/raw/master/Src/Resource/image/Contribute.png","https://gitee.com/kl222/RabbitCommon/raw/master/Src/Resource/image/Contribute.png","https://gitlab.com/kl222/RabbitCommon/-/raw/master/Src/Resource/image/Contribute.png"]}},"created_at":"2019-01-31T08:59:09.000Z","updated_at":"2026-02-03T07:57:22.000Z","dependencies_parsed_at":"2023-02-18T13:45:50.031Z","dependency_job_id":"730e275d-c664-4ea8-81ca-059754692e83","html_url":"https://github.com/KangLin/Calendar","commit_stats":null,"previous_names":[],"tags_count":59,"template":false,"template_full_name":null,"purl":"pkg:github/KangLin/Calendar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KangLin%2FCalendar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KangLin%2FCalendar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KangLin%2FCalendar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KangLin%2FCalendar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KangLin","download_url":"https://codeload.github.com/KangLin/Calendar/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KangLin%2FCalendar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33594851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T01:44:49.054Z","updated_at":"2026-05-28T05:01:16.224Z","avatar_url":"https://github.com/KangLin.png","language":"C++","funding_links":["https://github.com/KangLin/RabbitCommon/raw/master/Src/Resource/image/Contribute.png","https://gitee.com/kl222/RabbitCommon/raw/master/Src/Resource/image/Contribute.png","https://gitlab.com/kl222/RabbitCommon/-/raw/master/Src/Resource/image/Contribute.png"],"categories":[],"sub_categories":[],"readme":"## [\u003cimg src=\"App/AppIcon.ico\" alt=\"Calendar\" title=\"Calendar\" width=\"16\" height=\"16\"/\u003eCalendar](https://github.com/KangLin/Calendar)  \n\nAuthor: Kang Lin \u003ckl222@126.com\u003e\n\n-----------------------------------------------\n[:cn: 中文](README_zh_CN.md)\n\n[![build](https://github.com/KangLin/Calendar/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/KangLin/Calendar/actions/workflows/build.yml)\n[![build](https://github.com/KangLin/Calendar/actions/workflows/build.yml/badge.svg?branch=develop)](https://github.com/KangLin/Calendar/actions/workflows/build.yml)\n[![Appveyor build status](https://ci.appveyor.com/api/projects/status/hw8wsnwinrnohhda?svg=true)](https://ci.appveyor.com/project/KangLin/Calendar)\n\n[![GitHub issues](https://img.shields.io/github/issues/KangLin/Calendar)](https://github.com/KangLin/Calendar/issues)\n\n[![GitHub stars](https://img.shields.io/github/stars/KangLin/Calendar?label=Github%20stars)](https://star-history.com/#KangLin/Calendar\u0026Date)\n[![star](https://gitee.com/kl222/Calendar/badge/star.svg?theme=dark)](https://gitee.com/kl222/Calendar/stargazers)\n\n[![Latest Release](https://img.shields.io/github/release/KangLin/Calendar.svg?label=Github%20release)](https://github.com/KangLin/Calendar/releases/latest)\n[![Download Calendar](https://a.fsdn.com/con/app/sf-download-button)](https://sourceforge.net/projects/rabbitcalendar/files/latest/download)\n\n[![Github downloads](https://img.shields.io/github/downloads/KangLin/Calendar/total?label=Github%20Downloads)](https://github.com/KangLin/Calendar/releases)\n[![Sourceforge download](https://img.shields.io/sourceforge/dt/rabbitcalendar.svg?label=Sourceforge%20Downloads)](https://sourceforge.net/projects/rabbitcalendar/files/latest/download)\n\n------------------------------------------------\n\n### Tables of contents\n\n- [Features](#Features)\n- [ScreentShot](#ScreentShot)\n- [Donation](#Donation)\n- [Download](#Download)\n- [Depend](#Depend)\n- [Compile](#Compile)\n- [Use](#Use)\n- [Contribution](#Contribution)\n- [License Agreement](#License-Agreement)\n\n### Project location:\n- Project repository:\n  + Main repository: https://github.com/KangLin/Calendar\n  + Mirror repository:\n    - https://gitlab.com/kl222/Calendar\n    - https://gitee.com/kl222/Calendar\n    - https://sourceforge.net/projects/rabbitcalendar/\n    - https://invent.kde.org/kanglin/Calendar\n- [Project home](https://kanglin.github.io/Calendar/)\n\n### Features\n\n- [x] calendar\n     - [x] Birthady(Year cycle), include lunar and solar\n     - [x] Month cycle\n     - [x] Week cycle\n     - [x] Custom cycle\n- [x] Custom task\n  - [x] Eye Nurse： Vision protection\n- [x] Sticky\n- [x] Cross-platform, support multiple operating systems\n     - [x] Windows\n     - [x] Linux、Unix\n     - [x] Android\n     - [x] Mac os\n     - [ ] IOS\n\n     Mac os and IOS, I don't have the corresponding equipment,\n     please compile and test the students with the corresponding equipment.\n\n   See: [Qt5](https://doc.qt.io/qt-5/supported-platforms.html), [Qt6](https://doc.qt.io/qt-6/supported-platforms.html)\n\n### ScreentShot\n- Unix screent shot\n  - ![Calendar](Resource/Image/ScreenShot/Calendar.png)\n  - ![Sticky](Resource/Image/ScreenShot/Sticky.png)\n  - ![Tasks](Resource/Image/ScreenShot/Task.png)\n- Android screent shot\n  - ![Android Calendar](Resource/Image/ScreenShot/AndroidCalendar.png)\n  - ![Android Stricky List](Resource/Image/ScreenShot/AndroidStrickyList.png)\n  - ![Android Stricky](Resource/Image/ScreenShot/AndroidStricky.png)\n  - ![Android Tasks](Resource/Image/ScreenShot/AndroidTask.png)\n\n### Donation\n\n[![donation](https://gitee.com/kl222/RabbitCommon/raw/master/Src/Resource/image/Contribute_en.png \"donation\")](https://gitee.com/kl222/RabbitCommon/raw/master/Src/Resource/image/Contribute_en.png \"donation\")\n\n### Download\n\n- [![Latest release from github](https://img.shields.io/github/release/KangLin/Calendar.svg?label=Github%20Release)](https://github.com/KangLin/Calendar/releases/latest)\n- [![Latest release from sourceforge](https://a.fsdn.com/con/app/sf-download-button)](https://sourceforge.net/projects/rabbitcalendar/files/latest/download)\n\n### Depend\n- [Qt (LGPL v2.1)](http://qt.io/)\n  - Qt (official release): https://download.qt.io/official_releases/qt/\n    - Set environment variable or cmake parameters:\n      - QT_ROOT\n      - Qt6: Qt6_ROOT or Qt6_DIR .\n        See: https://doc.qt.io/qt-6/cmake-get-started.html\n      - Qt5: Qt5_ROOT or Qt5_DIR .\n        See: https://doc.qt.io/qt-5/cmake-get-started.html\n      - Environment variable\n\n            export QT_ROOT=Qt install root\n            # Needed by complied AppImage\n            export QMAKE=$QT_ROOT/bin/qmake\n\n            # When Qt6\n            export Qt6_ROOT=$QT_ROOT\n            # When Qt5\n            export Qt5_ROOT=$QT_ROOT\n\n            # Or\n\n            # When Qt6\n            export Qt6_DIR=$QT_ROOT/lib/cmake/Qt6\n            # When Qt5\n            export Qt5_DIR=$QT_ROOT/lib/cmake/Qt5\n\n      - CMAKE parameters\n\n            # Qt6\n            cmake -DQT_ROOT=[Qt install root] -DQt6_DIR=[Qt install root]/lib/cmake/Qt6 ......\n            # Qt5 \n            cmake -DQT_ROOT=[Qt install root] -DQt5_DIR=[Qt install root]/lib/cmake/Qt5 ......\n            # Needed by complied AppImage\n            export QMAKE=$QT_ROOT/bin/qmake\n\n  - System built-in:  \n    - Qt5:\n    \n          ~$ sudo apt install qttools5-dev qttools5-dev-tools qtbase5-dev qtbase5-dev-tools qtmultimedia5-dev qtlocation5-dev libqt5svg5-dev\n\n    - Qt6: See: [Script/build_depend.sh](../../Script/build_depend.sh)\n    \n          ~$ sudo apt install qmake6 qt6-tools-dev qt6-tools-dev-tools qt6-base-dev qt6-base-dev-tools qt6-qpa-plugins libqt6svg6-dev qt6-l10n-tools qt6-translations-l10n qt6-scxml-dev qt6-multimedia-dev\n\n    - When multiple distributions of Qt are installed on the system.\n      For example: Install Qt5 and Qt6 at the same time.\n      The system uses the qtchooser tool to select the current Qt version.\n  \n          l@l:/home/RabbitRemoteControl$ qtchooser \n          Usage:\n            qtchooser { -l | -list-versions | -print-env }\n            qtchooser -install [-f] [-local] \u003cname\u003e \u003cpath-to-qmake\u003e\n            qtchooser -run-tool=\u003ctool name\u003e [-qt=\u003cQt version\u003e] [program arguments]\n            \u003cexecutable name\u003e [-qt=\u003cQt version\u003e] [program arguments]\n\n          Environment variables accepted:\n           QTCHOOSER_RUNTOOL  name of the tool to be run (same as the -run-tool argument)\n           QT_SELECT          version of Qt to be run (same as the -qt argument)\n  \n      - List which version of Qt is currently installed on your system\n\n            l@l:/home/RabbitRemoteControl$ qtchooser -l\n            4\n            5\n            default\n            qt4-x86_64-linux-gnu\n            qt4\n            qt5-x86_64-linux-gnu\n            qt5\n            qt6\n\n            # View the Qt version of your current environment\n            l@l:/home/RabbitRemoteControl$ qtchooser --print-env\n            QT_SELECT=\"default\"\n            QTTOOLDIR=\"[Paths]\"\n            QTLIBDIR=\"Prefix=/usr\"\n    \n      - Set the Qt version of your current environment\n\n            export QT_SELECT=qt6  # Set the Qt6 version of your current environment\n\n            # View the Qt version of your current environment\n            l@l:/home/RabbitRemoteControl$ qtchooser --print-env\n            QT_SELECT=\"qt6\"\n            QTTOOLDIR=\"/usr/lib/qt6/bin\"\n            QTLIBDIR=\"/usr/lib/aarch64-linux-gnu\"\n  \n- [RabbitCommon](https://github.com/KangLin/RabbitCommon)\n\n    ```\n    git clone https://github.com/KangLin/RabbitCommon.git\n    ```\n\n- [LunarCalendar](https://github.com/KangLin/LunarCalendar)\n\n### Compile\n- Create and enter the build directory\n\n    ```\n    git clone --recursive https://github.com/KangLin/Calendar.git\n    cd Calendar\n    mkdir build\n    ```\n\n- Compile\n  + CMAKE parameter：\n    + Qt\n      + QT_ROOT: Qt install root\n      + Qt6: See: https://doc.qt.io/qt-6/cmake-get-started.html\n        + Qt6_ROOT: Is same QT_ROOT\n        + Qt6_DIR: $QT_ROOT/lib/cmake/Qt6\n      + Qt5: See: https://doc.qt.io/qt-5/cmake-get-started.html\n        + Qt5_ROOT: Is same QT_ROOT\n        + Qt5_DIR: $QT_ROOT/lib/cmake/Qt5\n    - [MUST] RabbitCommon_ROOT: RabbitCommon source directory\n    - [Optional] CMAKE_INSTALL_PREFIX: install prefix\n  + windows or linux\n\n        cd build\n        cmake .. -DCMAKE_INSTALL_PREFIX=`pwd`/install \\\n             -DCMAKE_BUILD_TYPE=Release \\\n             -DQt6_DIR=${QT_ROOT}/lib/cmake/Qt6 \\\n             -DRabbitCommon_ROOT=\n        cmake --build . --config Release --target install\n        \n  + android: version greater than 6\n    - The host is linux\n      + Compile\n      \n            cd build\n            cmake .. -DCMAKE_BUILD_TYPE=Release \\\n                -DCMAKE_INSTALL_PREFIX=`pwd`/android-build \\\n                -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \\\n                -DANDROID_ABI=\"armeabi-v7a with NEON\" \\\n                -DANDROID_PLATFORM=android-18 \\\n                -DQT_ROOT=... -DQt6_DIR=... \\\n                -DRabbitCommon_ROOT= \n            cmake --build . --config Release --target install\n     \n    - The host is windows\n      + Compile\n      \n            cd build\n            cmake .. -G\"Unix Makefiles\" ^\n                -DCMAKE_BUILD_TYPE=Release ^\n                -DCMAKE_INSTALL_PREFIX=`pwd`/android-build ^\n                -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake ^\n                -DCMAKE_MAKE_PROGRAM=${ANDROID_NDK}/prebuilt/windows-x86_64/bin/make.exe ^\n                -DANDROID_PLATFORM=android-18 ^\n                -DANDROID_ABI=arm64-v8a ^\n                -DANDROID_ARM_NEON=ON ^\n                -DQT_ROOT=... -DQt6_DIR=... ^\n                -DRabbitCommon_ROOT= \n            cmake --build . --config Release --target install\n       \n    + Parameter Description: https://developer.android.google.cn/ndk/guides/cmake\n      + ANDROID_ABI: The following values can be taken:\n         Goal ABI. If the target ABI is not specified, CMake uses armeabi-v7a by default.\n         Valid ABI are:\n        + armeabi：CPU with software floating point arithmetic based on ARMv5TE\n        + armeabi-v7a：ARMv7-based device with hardware FPU instructions (VFP v3 D16)\n        + armeabi-v7a with NEON：Same as armeabi-v7a, but with NEON floating point instructions enabled. This is equivalent to setting -DANDROID_ABI=armeabi-v7a and -DANDROID_ARM_NEON=ON.\n        + arm64-v8a：ARMv8 AArch64 Instruction Set\n        + x86：IA-32 Instruction Set\n        + x86_64 - x86-64 Instruction Set\n      + ANDROID_NDK \u003cpath\u003e The path of installed ndk in host\n      + ANDROID_PLATFORM: For a full list of platform names and corresponding Android system images, see the [Android NDK Native API] (https://developer.android.google.com/ndk/guides/stable_apis.html)\n      + ANDROID_ARM_MODE\n      + ANDROID_ARM_NEON\n      + ANDROID_STL: Specifies the STL that CMake should use. \n        - c++_shared: The shared library variant of libc++.\n        - c++_static: The static library variant of libc++.\n        - none: No C++ standard library support.\n        - system: The system STL\n    + Install apk to devices\n\n           adb install android-build-debug.apk \n\n- Note  \n    + windows\n       If you build app. Qt does not provide openssl dynamic library for copyright reasons, so you must copy the dynamic library of openssl to the installation directory.\n        - If it is 32, you can find the dynamic library of openssl (libeay32.dll, ssleay32.dll) in the Qt installer Tools\\QtCreator\\bin directory.\n        - If it is 64-bit, you will need to download the binary installation package for openssl yourself.\n  \n    + linux\n\n        ```\n        sudo apt-get install libssl1.1\n        ```\n\n### Use\n- pro\n    - Library mode:\n     Add the following code to the project file:\n\n        ```\n        isEmpty(Calendar_DIR): Calendar_DIR=$ENV{Calendar_DIR}\n        isEmpty(Calendar_DIR){\n            message(\"1. Please download Calendar source code from https://github.com/KangLin/Calendar\")\n            message(\"   ag:\")\n            message(\"       git clone https://github.com/KangLin/Calendar.git\")\n            message(\"2. Build the project, get library\")\n            error(\"2. Then set value Calendar_DIR to library root directory\")\n        }\n        INCLUDEPATH *= $${Calendar_DIR}/include $${Calendar_DIR}/include/export\n        LIBS *= -L$${Calendar_DIR}/lib -lLunarCalendar -lCalendar\n        ```\n\n- cmake\n    + Source code\n        + Submodule mode\n\n            ```\n            add_subdirectory(3th_libs/Calendar/Src)\n            ```\n      \n        + Non-submodule mode\n\n            ```\n            # Need include ${RabbitCommon_ROOT}/cmake/Translations.cmake\n            if( \"${RabbitCommon_ROOT}\" STREQUAL \"\" )\n                set(RabbitCommon_ROOT $ENV{RabbitCommon_ROOT})\n                if( \"${RabbitCommon_ROOT}\" STREQUAL \"\" )\n                    set(RabbitCommon_ROOT ${CMAKE_SOURCE_DIR}/../RabbitCommon)\n                endif()\n             endif()\n\n             if(DEFINED RabbitCommon_ROOT AND EXISTS ${RabbitCommon_ROOT}/Src)\n                 add_subdirectory(${RabbitCommon_ROOT}/Src ${CMAKE_BINARY_DIR}/RabbitCommon)\n                 include(${RabbitCommon_ROOT}/cmake/Translations.cmake)\n             else()\n                 message(\"1. Please download RabbitCommon source code from https://github.com/KangLin/RabbitCommon\")\n                 message(\"   ag:\")\n                 message(\"       git clone https://github.com/KangLin/RabbitCommon.git\")\n                 message(\"2. Then set cmake value or environment variable RabbitCommon_ROOT to download root directory.\")\n                 message(\"   ag:\")\n                 message(FATAL_ERROR \"       cmake -DRabbitCommon_ROOT= \")\n            endif()\n\n            set(Calendar_DIR $ENV{Calendar_DIR} CACHE PATH \"Set Calendar source code root directory.\")\n            if(EXISTS ${Calendar_DIR}/Src)\n                add_subdirectory(${Calendar_DIR}/Src ${CMAKE_BINARY_DIR}/Calendar)\n            else()\n                message(\"1. Please download Calendar source code from https://github.com/KangLin/Calendar\")\n                message(\"   ag:\")\n                message(\"       git clone https://github.com/KangLin/Calendar.git\")\n                message(\"2. Then set cmake value or environment variable Calendar_DIR to download root directory.\")\n                message(\"    ag:\")\n                message(FATAL_ERROR \"       cmake -DCalendar_DIR= \")\n            endif()\n            ```\n            \n    + Library mode:\n\n        + Cmake parameter Calendar_DIR specifies the installation root directory\n        \n            ```\n            FIND_PACKAGE(Calendar)\n            ```\n        \n        + Add libraries and include in CMakeLists.txt\n\n            ```\n            SET(APP_LIBS ${PROJECT_NAME} ${QT_LIBRARIES})\n            if(Calendar_FOUND)\n                target_compile_definitions(${PROJECT_NAME}\n                            PRIVATE -DCalendar)\n                target_include_directories(${PROJECT_NAME}\n                                PRIVATE \"${Calendar_INCLUDE_DIRS}/Src\"\n                                        \"${Calendar_INCLUDE_DIRS}/Src/export\")\n                set(APP_LIBS ${APP_LIBS} ${Calendar_LIBRARIES})\n            endif()\n            target_link_libraries(${PROJECT_NAME} ${APP_LIBS})\n            ```\n\n### Contribution\n\n- [Question](https://github.com/KangLin/Calendar/issues)\n- [Contributors](https://github.com/KangLin/Calendar/graphs/contributors)\n\n### [License Agreement](License.md \"License.md\")\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkanglin%2Fcalendar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkanglin%2Fcalendar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkanglin%2Fcalendar/lists"}