# LunarCalendar
**Repository Path**: linch2008/LunarCalendar
## Basic Information
- **Project Name**: LunarCalendar
- **Description**: 用QT写的带农历的日历。Use Qt write lunar calendar.
- **Primary Language**: C++
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 22
- **Created**: 2020-02-20
- **Last Updated**: 2021-12-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
农历
================================================
作者:康林(kl222@126.com)
[
英语](README.md)
- [](https://ci.appveyor.com/project/KangLin/lunarcalendar/branch/master)
- [](https://travis-ci.org/KangLin/LunarCalendar)
------------------------------------------------
### 目录:
- [功能](#功能)
- [捐赠](#捐赠)
- [屏幕截图](#屏幕截图)
- [下载安装包](#下载安装包)
- [编译](#编译)
- [其它应用使用本项目](#其它应用使用本项目)
- [贡献](#贡献)
- [许可协议](#许可协议)
+ [第三方库](#第三方库)
------------------------------------------------
### 功能
Qt 写的农历。它提供:
- 一个Qt界面的农历日历库,支持 QSS (换肤功能)。
+ 阳历
+ 农历
+ 阳历和农历节日(中国假日)
+ 阳历和农历纪念日(例如:生日,结婚纪念日等)
+ 月视图
+ 周视图
- 一个简单的日历应用程序。用于示例如何使用此农历日历库。
- 此库的一个完整应用 [任务](https://github.com/KangLin/Tasks)
- 跨平台,支持多操作系统
+ [x] Windows
+ [x] Linux、Unix
+ [x] Android
+ [ ] Mac os
+ [ ] IOS
Mac os 和 IOS ,本人没有相应设备,请有相应设备的同学自己编译,测试。
## 捐赠

------------------------------------------------
### 屏幕截图
- Windows


- Android

------------------------------------------------
### [下载安装包](https://github.com/KangLin/LunarCalendar/releases/latest)
- linux
+ [LunarCalendar_v0.1.9.tar.gz](https://github.com/KangLin/LunarCalendar/releases/download/v0.1.9/LunarCalendar_v0.1.9.tar.gz)
AppImage格式的执行程序,可直接运行在linux系统,详见:https://appimage.org/
用法:
1. 解压。把 LunarCalendar_v0.1.9.tar.gz 复制到你想安装的位置,并解压:
mkdir LunarCalendar
cd LunarCalendar
cp $DOWNLOAD/LunarCalendar_v0.1.9.tar.gz .
tar xvfz LunarCalendar_v0.1.9.tar.gz
2. 安装
./install1.sh install LunarCalendar
3. 如果要卸载,运行:
./install1.sh remove LunarCalendar
- ubuntu
+ [lunarcalendar_0.1.9_amd64.deb](https://github.com/KangLin/LunarCalendar/releases/download/v0.1.9/lunarcalendar_0.1.9_amd64.deb)
deb 安装包,可用于 Ubuntu
- windows
+ [LunarCalendar-Setup-v0.1.9.exe](https://github.com/KangLin/LunarCalendar/releases/download/v0.1.9/LunarCalendar-Setup-v0.1.9.exe)
Windows安装包,支持 Windows xp 以上系统
- android
+ [LunarCalendar_v0.1.9.apk](https://github.com/KangLin/LunarCalendar/releases/download/v0.1.9/LunarCalendar_v0.1.9.apk)
Android 安装包
adb install LunarCalendar_v0.1.9.apk
------------------------------------------------
### 编译
- 依赖
+ [Qt (LGPL v2.1)](http://qt.io/)
+ [RabbitCommon](https://github.com/KangLin/RabbitCommon)
git clone https://github.com/KangLin/RabbitCommon.git
- 建立并进入build目录
git clone --recursive https://github.com/KangLin/LunarCalendar.git
cd LunarCalendar
mkdir build
- 编译
+ 用 qmake
cd build
qmake ../LunarCalendar.pro RabbitCommon_DIR=
make install
+ 用 cmake
- windows 或 linux
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=`pwd`/install \
-DCMAKE_BUILD_TYPE=Release \
-DQt5_DIR=${QT_ROOT}/lib/cmake/Qt5 \
-DRabbitCommon_DIR=
cmake --build . --config Release --target install
- android
+ 主机是linux
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=`pwd`/android-build \
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
-DANDROID_ABI="armeabi-v7a with NEON" \
-DANDROID_PLATFORM=android-18 \
-DQt5_DIR= \
-DRabbitCommon_DIR=
cmake --build . --config Release --target install
cmake --build . --target APK
+ 主机是windows
cd build
cmake .. -G"Unix Makefiles" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=`pwd`/android-build \
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
-DCMAKE_MAKE_PROGRAM=${ANDROID_NDK}/prebuilt/windows-x86_64/bin/make.exe \
-DANDROID_PLATFORM=android-18 \
-DANDROID_ABI=arm64-v8a \
-DANDROID_ARM_NEON=ON \
-DQt5_DIR= \
-DRabbitCommon_DIR=
cmake --build . --config Release --target install
cmake --build . --target APK
- 参数说明:https://developer.android.google.cn/ndk/guides/cmake
+ ANDROID_ABI: 可取下列值:
目标 ABI。如果未指定目标 ABI,则 CMake 默认使用 armeabi-v7a。
有效的目标名称为:
- armeabi:带软件浮点运算并基于 ARMv5TE 的 CPU。
- armeabi-v7a:带硬件 FPU 指令 (VFPv3_D16) 并基于 ARMv7 的设备。
- armeabi-v7a with NEON:与 armeabi-v7a 相同,但启用 NEON 浮点指令。这相当于设置 -DANDROID_ABI=armeabi-v7a 和 -DANDROID_ARM_NEON=ON。
- arm64-v8a:ARMv8 AArch64 指令集。
- x86:IA-32 指令集。
- x86_64 - 用于 x86-64 架构的指令集。
+ ANDROID_NDK 主机上安装的 NDK 根目录的绝对路径
+ ANDROID_PLATFORM: 如需平台名称和对应 Android 系统映像的完整列表,请参阅 [Android NDK 原生 API](https://developer.android.google.cn/ndk/guides/stable_apis.html)
+ ANDROID_ARM_MODE
+ ANDROID_ARM_NEON
+ ANDROID_STL:指定 CMake 应使用的 STL。
- c++_shared: 使用 libc++ 动态库
- c++_static: 使用 libc++ 静态库
- none: 没有 C++ 库支持
- system: 用系统的 STL
- 安装 apk 到设备
adb install android-build-debug.apk
- 安装注意
Qt因为版权原因,没有提供openssl动态库,所以必须自己复制openssl的动态库到安装目录下。
+ windows
- 如果是32的,可以在Qt安装程序Tools\QtCreator\bin目录下,找到openssl的动态库(libeay32.dll、ssleay32.dll)
- 如果是64位,则需要自己下载openssl的二进制安装包。
+ linux
```
sudo apt-get install libssl1.1
```
------------------------------------------------
### 开发
- 目录结构
```
|-App 应用程序代码
|-Src 日历库代码
|- LunarCalendar.h 日历库接口头文件
|- Resource
|- database
|- chinese_holidays.sql 中国假期 SQL 文件
```
- 中国假日更新
1. 从中国政府网 “首页 > 信息公开 > 国务院文件 > 综合政务 > 其他” 找到假期文件
例如: 2020年假期 http://www.gov.cn/zhengce/content/2019-11/21/content_5454164.htm
2. 修改中国假期 SQL 文件:Src/Resource/database/chinese_holidays.sql
------------------------------------------------
### 其它应用使用本项目
- 直接用本项目源码
+ cmake工程
- 子模块方式
+ 增加子模块:
git submodule add https://github.com/KangLin/LunarCalendar.git 3th_lib/LunarCalendar
git submodule update --init --recursive
+ 在 CMakeLists.txt 中以子目录方式加入
add_subdirectory(3th_lib/LunarCalendar/Src)
- 非子模块方式
+ 下载源码:https://github.com/KangLin/LunarCalendar
git clone --recursive https://github.com/KangLin/LunarCalendar.git
+ 引入以 add_subdirectory 本项目录
set(LunarCalendar_DIR $ENV{LunarCalendar_DIR} CACHE PATH "Set LunarCalendar source code root directory.")
if(EXISTS ${LunarCalendar_DIR}/Src)
add_subdirectory(${LunarCalendar_DIR}/Src ${CMAKE_BINARY_DIR}/LunarCalendar)
else()
message("1. Please download LunarCalendar source code from https://github.com/KangLin/LunarCalendar")
message(" ag:")
message(" git clone https://github.com/KangLin/LunarCalendar.git")
message("2. Then set cmake value or environment variable LunarCalendar_DIR to download root dirctory.")
message(" ag:")
message(FATAL_ERROR " cmake -DLunarCalendar_DIR= ")
endif()
+ 在使用的工程目录CMakeLists.txt
SET(APP_LIBS ${PROJECT_NAME} ${QT_LIBRARIES})
if(TARGET LunarCalendar)
target_compile_definitions(${PROJECT_NAME}
PRIVATE -DLunarCalendar)
target_include_directories(${PROJECT_NAME}
PRIVATE "${LunarCalendar_DIR}/Src"
"${LunarCalendar_DIR}/Src/export")
set(APP_LIBS ${APP_LIBS} LunarCalendar)
endif()
target_link_libraries(${PROJECT_NAME} ${APP_LIBS})
- 以库方式使用使用
+ Qt 工程文件
+ 在环境变量(LunarCalendar_DIR)或 QMAKE参数 (LunarCalendar_DIR)
中指定 LunarCalendar 库安装根目录的位置,然后在主工程文件(.pro)中加入下列:
isEmpty(LunarCalendar_DIR): LunarCalendar_DIR=$$(LunarCalendar_DIR)
!isEmpty(LunarCalendar_DIR): exists("$${LunarCalendar_DIR}/include/LunarCalendar.h"){
DEFINES += LunarCalendar
INCLUDEPATH *= $${LunarCalendar_DIR}/include $${LunarCalendar_DIR}/include/export
LIBS *= -L$${LunarCalendar_DIR}/lib -lLunarCalendar
} else{
message("1. Please download LunarCalendar source code from https://github.com/KangLin/LunarCalendar ag:")
message(" git clone https://github.com/KangLin/LunarCalendar.git")
message("2. Build and make install the project")
error("3. Then set value LunarCalendar_DIR to install dirctory")
}
+ cmake
cmake 参数 LunarCalendar_DIR 指定安装根目录
find_package(LunarCalendar)
SET(APP_LIBS ${PROJECT_NAME} ${QT_LIBRARIES})
if(LunarCalendar_FOUND)
target_compile_definitions(${PROJECT_NAME}
PRIVATE -DLunarCalendar)
target_include_directories(${PROJECT_NAME}
PRIVATE "${LunarCalendar_INCLUDE_DIRS}/Src"
"${LunarCalendar_INCLUDE_DIRS}/Src/export")
set(APP_LIBS ${APP_LIBS} ${LunarCalendar_LIBRARIES})
endif()
target_link_libraries(${PROJECT_NAME} ${APP_LIBS})
- 加载翻译资源
+ 用库中提供的函数
CLunarCalendar::InitResource();
------------------------------------------------
### 贡献
- 问题:https://github.com/KangLin/LunarCalendar/issues
- 项目位置:https://github.com/KangLin/LunarCalendar
------------------------------------------------
### [许可协议](License.md "License.md")
请遵守本协议和下列第三方库的许可协议,并感谢第三方库的作者。
#### 第三方库
- [寿星天文历](https://github.com/yuangu/sxtwl_cpp)