https://github.com/kanglin/rabbitcommon
Qt common library
https://github.com/kanglin/rabbitcommon
Last synced: over 1 year ago
JSON representation
Qt common library
- Host: GitHub
- URL: https://github.com/kanglin/rabbitcommon
- Owner: KangLin
- License: gpl-3.0
- Created: 2019-04-11T04:25:56.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2024-10-21T08:31:08.000Z (over 1 year ago)
- Last Synced: 2024-10-22T14:55:12.383Z (over 1 year ago)
- Language: C++
- Homepage:
- Size: 5.1 MB
- Stars: 13
- Watchers: 4
- Forks: 14
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: ChangeLog.md
- Funding: .github/FUNDING.yml
- License: License.md
- Authors: Authors.md
Awesome Lists containing this project
README
## Qt common library
================================================
Author:Kang Lin(kl222@126.com)
[](https://github.com/KangLin/RabbitCommon/actions/workflows/build.yml)
[](https://github.com/KangLin/RabbitCommon/actions/workflows/build.yml)
[](https://ci.appveyor.com/project/KangLin/rabbitcommon)
[:cn: Chinese](README_zh_CN.md)
- Project home site: https://github.com/KangLin/RabbitCommon
- Mirror:
- https://sourceforge.net/projects/rabbitcommon/
- https://launchpad.net/rabbitcommon
- https://gitlab.com/kl222/RabbitCommon
- https://invent.kde.org/kanglin/RabbitCommon
- https://gitee.com/kl222/RabbitCommon
- https://bitbucket.org/kl222/rabbitcommon
### Developer documents
[Online developer documents](https://kanglin.github.io/RabbitCommon/English/html/index.html)
### Latest release
- [Latest release](https://github.com/KangLin/RabbitCommon/releases/latest)
- See:
- Semantic Versioning: https://semver.org/
### Functions
[API](https://kanglin.github.io/RabbitCommon/English/html/group__API.html)
Qt common library. include follow functions:
- [x] GUI
- [x] [About](#About)
+ [cmark](https://github.com/commonmark/cmark): support MarkDown
- [x] [Updater](#Updater)
- [x] [Style (include icon theme)](Src/FrmStyle/FrmStyle.h)
- [x] [Recent open menu](Src/RabbitRecentMenu.h)
- [x] [Title bar](Src/TitleBar.h)
- [x] [Folder browser](Src/FolderBrowser/FolderBrowser.h)
- [x] [Download the same file from multiple URLs](Src/DownloadFile.h)
- [x] [Directory functions](Src/RabbitCommonDir.h)
- [x] [Encrypt](Src/RabbitCommonEncrypt.h)
- [x] [Register](Src/RabbitCommonRegister.h)
- [x] Tools
+ [x] [Execute the program with administrator privileges](#execute-the-program-with-administrator-privileges)
+ [x] [The program starts automatically](#the-program-starts-automatically)
+ [x] [Directory functions](Src/RabbitCommonDir.h)
+ [x] [Get system information](#Get-system-information)
- [x] [Get current login user name](#Get-current-login-user-name)
- [x] cmake functions
+ [x] Translations
+ [x] Add target, plugin target
+ [x] Generate pkg-config configure file
+ [x] Generate cmake configure file
+ [x] Add uninstall target
- [x] Cross-platform, support multiple operating systems
- [x] Windows
- [x] Linux、Unix
- [x] Android
- [ ] Mac os
- [ ] IOS
Mac os and IOS, I don't have the corresponding equipment,
please compile and test the students with the corresponding equipment.
See: [Qt5](https://doc.qt.io/qt-5/supported-platforms.html), [Qt6](https://doc.qt.io/qt-6/supported-platforms.html)
### Compile
- Create and entry build directory
git clone --recursive https://github.com/KangLin/RabbitCommon.git
cd RabbitCommon
mkdir build
- Compile
+ Use cmake
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
-DQT_DIR=... \
-DQt5_DIR=${QT_ROOT}/lib/cmake/Qt5
cmake --build .
* Parameter
- CMAKE_BUILD_TYPE: build type(MUST)
- QT_DIR: Qt install position
- BUILD_DOCS: build doxygen documents
- BUILD_APP: build app
- BUILD_ABOUT: build about
- BUILD_UPDATE: build updater
- BUILD_ADMINAUTHORISER: build admin authoriser
**NOTE**: If you use MSVC, you need to add -DCMAKE_BUILD_TYPE=Debug,
otherwise the following error will occur when compiling Debug:
RabbitCommonTools.obj : error LNK2019: An external symbol that cannot be resolved "int __cdecl qInitResources_translations_RabbitCommon(void)" (?qInitResources_translations_RabbitCommon@@YAHXZ),该符号在函数 "void __cdecl g_RabbitCommon_InitResource(void)" (?g_RabbitCommon_InitResource@@YAXXZ) 中被引用
RabbitCommonTools.obj : error LNK2019: An external symbol that cannot be resolved "int __cdecl qCleanupResources_translations_RabbitCommon(void)" (?qCleanupResources_translations_RabbitCommon@@YAHXZ),该符号在函数 "void __cdecl g_RabbitCommon_CleanResource(void)" (?g_RabbitCommon_CleanResource@@YAXXZ) 中被引用
- linux
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=`pwd`/install \
-DCMAKE_BUILD_TYPE=Release \
-DQT_DIR=... \
-DQt5_DIR=${QT_ROOT}/lib/cmake/Qt5
cmake --build . --config Release --target install
- windows
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=`pwd`/install ^
-DCMAKE_BUILD_TYPE=Release ^
-DQT_DIR=... ^
-DQt5_DIR=${QT_ROOT}/lib/cmake/Qt5
cmake --build . --config Release --target install
- Android
- Qt6 or laster
cd build
${Qt6_DIR}/bin/qt-cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release
Or:
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=`pwd`/android-build \
-DCMAKE_TOOLCHAIN_FILE=$Qt6_DIR/lib/cmake/Qt6/qt.toolchain.cmake
cmake --build . --config Release
- The host is 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 \
-DQT_DIR=... \
-DQt5_DIR=${QT_ROOT}/lib/cmake/Qt5
cmake --build . --config Release --target all
- The host is 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 ^
-DQT_DIR=... \
-DQt5_DIR=${QT_ROOT}/lib/cmake/Qt5
cmake --build . --config Release --target all
- Parameter Description: https://developer.android.google.cn/ndk/guides/cmake
+ ANDROID_ABI: The following values can be taken:
Goal ABI. If the target ABI is not specified, CMake uses armeabi-v7a by default.
Valid ABI are:
- armeabi:CPU with software floating point arithmetic based on ARMv5TE
- armeabi-v7a:ARMv7-based device with hardware FPU instructions (VFP v3 D16)
- 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.
- arm64-v8a:ARMv8 AArch64 Instruction Set
- x86:IA-32 Instruction Set
- x86_64 - x86-64 Instruction Set
+ ANDROID_NDK The path of installed ndk in host
+ 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)
+ ANDROID_ARM_MODE
+ ANDROID_ARM_NEON
+ ANDROID_STL: Specifies the STL that CMake should use.
- c++_shared: The shared library variant of libc++.
- c++_static: The static library variant of libc++.
- none: No C++ standard library support.
- system: The system STL
- Install apk to devices
adb install android-build-debug.apk
- Qt6 and later
cd build
${Qt6_DIR}/bin/qt-cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release
Or:
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=`pwd`/android-build \
-DCMAKE_TOOLCHAIN_FILE=$Qt6_DIR/lib/cmake/Qt6/qt.toolchain.cmake
cmake --build . --config Release
+ Use qmake. (Deprecated, please use CMake for new programs)
cd build
qmake ../RabbitCommon.pro
make install
* Parameter
- BUILD_DOCS: build doxygen documents
- BUILD_ABOUT=OFF: Off build about
- BUILD_UPDATE=OFF: Off build updater
- BUILD_ADMINAUTHORISER=OFF: Off admin authoriser
- Compilation notes:
Use Qtcreate compile for android in windows
- qmake. It may appear that the dependent library could not be found. (Deprecated, please use CMake for new programs)
Don't find D:\Source\build-RabbitCommon-Android_for_armeabi_v7a_Clang_Qt_5_12_4_for_Android_ARMv7-Debug\bin\libRabbitCommon.so
move libRabbitCommon.so ..\bin\libRabbitCommon.so
process_begin: CreateProcess(NULL, move libRabbitCommon.so ..\bin\libRabbitCommon.so, ...) failed.
make (e=2): The system can not find the file specified。
make[1]: [..\bin\libRabbitCommon.so] Error 2 (ignored)
The reason is that the make program under windows cannot convert the \ in the path.
Solution: Use a make program that recognizes the \ in the path, for example: mingw32-make.exe.
- cmake
- Set Generator to "Unix Makefiles"
- Set CMAKE_MAKE_PROGRAM to ${ANDROID_NDK}/prebuilt/windows-x86_64/bin/make.exe
- Install notes:
+ windows
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.
- If it is 32, you can find the dynamic library of openssl (libeay32.dll, ssleay32.dll) in the Qt installer Tools\QtCreator\bin directory.
- If it is 64-bit, you will need to download the binary installation package for openssl yourself.
+ linux
```
sudo apt-get install libssl1.1
```
### Other application use the project
if(NOT RabbitCommon_ROOT)
set(RabbitCommon_ROOT $ENV{RabbitCommon_ROOT})
if(NOT RabbitCommon_ROOT)
set(RabbitCommon_ROOT ${CMAKE_SOURCE_DIR}/../RabbitCommon)
endif()
endif()
if(RabbitCommon_ROOT AND EXISTS ${RabbitCommon_ROOT}/Src)
message("Use RabbitCommon source code")
add_subdirectory(${RabbitCommon_ROOT}/Src ${CMAKE_BINARY_DIR}/RabbitCommon)
else()
find_package(RabbitCommon)
if(NOT RabbitCommon_FOUND)
message("RabbitCommon_ROOT is not found. Please use one of the following ways to set it:")
message("1. Set RabbitCommon_ROOT to the install prefix of RabbitCommon.")
message("2. Set RabbitCommon_ROOT to source code root of RabbitCommon.")
message("2.1 Please download the source code of RabbitCommon from https://github.com/KangLin/RabbitCommon")
message(" ag:")
message(" git clone https://github.com/KangLin/RabbitCommon.git ${CMAKE_SOURCE_DIR}/..")
message("2.2 Then set cmake variable or environment variable RabbitCommon_ROOT to download root directory.")
message(" ag:")
message(" cmake -DRabbitCommon_ROOT=${CMAKE_SOURCE_DIR}/.. ")
message(FATAL_ERROR "RabbitCommon_ROOT isn't set.")
endif()
endif()
- Use in library mode
+ cmake
Set RabbitCommon_ROOT to specify the root directory of the installed RabbitCommon
find_package(RabbitCommon)
- Use the source code directly
+ cmake
- Submodule
add_subdirectory(3th_libs/RabbitCommon/Src)
- No submodule
+ Download RabbitCommon to the same directory of the application
git clone https://github.com/KangLin/RabbitCommon.git
+ Introduced to add_subdirectory this directory
if(NOT RabbitCommon_ROOT)
set(RabbitCommon_ROOT $ENV{RabbitCommon_ROOT})
if(NOT RabbitCommon_ROOT)
set(RabbitCommon_ROOT ${CMAKE_SOURCE_DIR}/../RabbitCommon)
endif()
endif()
if(RabbitCommon_ROOT AND EXISTS ${RabbitCommon_ROOT}/Src)
message("Use RabbitCommon source code")
add_subdirectory(${RabbitCommon_ROOT}/Src ${CMAKE_BINARY_DIR}/RabbitCommon)
else()
find_package(RabbitCommon)
if(NOT RabbitCommon_FOUND)
message("RabbitCommon_ROOT is not found. Please use one of the following ways to set it:")
message("1. Set RabbitCommon_ROOT to the install prefix of RabbitCommon.")
message("2. Set RabbitCommon_ROOT to source code root of RabbitCommon.")
message("2.1 Please download the source code of RabbitCommon from https://github.com/KangLin/RabbitCommon")
message(" ag:")
message(" git clone https://github.com/KangLin/RabbitCommon.git ${CMAKE_SOURCE_DIR}/..")
message("2.2 Then set cmake variable or environment variable RabbitCommon_ROOT to download root directory.")
message(" ag:")
message(" cmake -DRabbitCommon_ROOT=${CMAKE_SOURCE_DIR}/.. ")
message(FATAL_ERROR "RabbitCommon_ROOT isn't set.")
endif()
endif()
+ Add the following code to the CMakeLists.txt file of the project
target_link_libraries(${PROJECT_NAME} RabbitCommon)
- Static library
target_compile_definitions(${PROJECT_NAME} PRIVATE RABBITCOMMON_STATIC_DEFINE)
- Initialization functions is called at the beginning of main() of the program
and after QApplication
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
a.setApplicationName(......);
// Because it depend on QApplication::applicationName()
RabbitCommon::CTools::Instance()->Init();
......
}
### Functions
[Online developer documents](https://kanglin.github.io/RabbitCommon/English/html/group__API.html)
#### [About](Src/DlgAbout/DlgAbout.h)
- Install Authors、 License、 ChangeLog files.
File name naming rules:
Authors.md、License.md、ChangeLog.md is the default file.
The local file naming rule is to add the local name after the default file name.
For example: Chinese file:
Authors_zh_CN.md、License_zh_CN.md、ChangeLog_zh_CN.md
SET(OTHER_FILES
${CMAKE_SOURCE_DIR}/License.md
${CMAKE_SOURCE_DIR}/Authors.md
${CMAKE_SOURCE_DIR}/Authors_zh_CN.md
${CMAKE_SOURCE_DIR}/ChangeLog.md
)
INSTALL_FILE(SOURCES ${OTHER_FILES} DESTINATION "." COMPONENT Runtime)
- Used in code
QApplication a(argc, argv);
a.setApplicationVersion(RabbitCommon_VERSION);
a.setApplicationName("SerialPortAssistant");
a.setApplicationDisplayName(QObject::tr("SerialPortAssistant"));
#ifdef RABBITCOMMON
CDlgAbout about(this);
about.m_AppIcon = QImage(":/icon/SerialPortAssistant");
about.m_szHomePage = "https://github.com/KangLin/SerialPortAssistant";
#if defined (Q_OS_ANDROID)
about.showMaximized();
about.exec();
#else
about.exec();
#endif
#endif
- See: https://github.com/KangLin/SerialPortAssistant

#### Updater
See: [FrmUpdater.h](Src/FrmUpdater/FrmUpdater.h)
```
#ifdef RABBITCOMMON
CFrmUpdater *fu = new CFrmUpdater();
fu->SetTitle(QImage(":/image/SerialPortAssistant"), qApp->applicationDisplayName());
#if defined (Q_OS_ANDROID)
fu->showMaximized();
#else
fu->show();
#endif
#endif
```
- Use CFrmUpdater::GenerateUpdateXml() to generate update xml file, use --help look up parameter
./TasksApp --help
Usage: ./TasksApp [options]
Options:
-h, --help Displays this help.
-v, --version Displays version information.
-f, --file xml file name
--pv Package version
-t, --time
- Add Update/update.xml in project source root directory, then add the url to CFrmUpdater::DownloadFile.
v2.3.2
url
url
url
url
- See: https://github.com/KangLin/SerialPortAssistant

#### Execute the program with administrator privileges
[adminauthoriser.h](Src/AdminAuthoriser/adminauthoriser.h)
- Internal implementation
QString szCmd = "mkdir";
QStringList paras;
paras << "-p" << "/opt/RabbitCommonAdminAuthoriseTest";
qDebug() << "RabbitCommon::AdminAuthoriser::Instance()->execute(szCmd, paras):"
<< RabbitCommon::AdminAuthoriser::Instance()->execute(szCmd, paras);
- Public interface:
RabbitCommon::CTools::executeByRoot("regedit", QStringList());
#### The program starts automatically
[The program starts automatically](Src/RabbitCommonTools.h)
static int InstallStartRun(const QString &szName = QString(),
const QString &szPath = QString(),
bool bAllUser = false);
static int RemoveStartRun(const QString &szName = QString(),
bool bAllUser = false);
static bool IsStartRun(const QString &szName = QString(),
bool bAllUser = false);
#### Get system information
- Get current login user name:
RabbitCommon::CTools::GetCurrentUser();
- Get host name:
RabbitCommon::CTools::GetHostName();
### Other projects using this project
- [Rabbit remote control](https://github.com/KangLin/RabbitRemoteControl)
- [Rabbit IM](https://github.com/KangLin/RabbitCommon)
- [Calendar](https://github.com/KangLin/Calendar)
- [LunarCalendar](https://github.com/KangLin/LunarCalendar)
- [SerialPortAssistant](https://github.com/KangLin/SerialPortAssistant)
- [FaceRecognizer](https://github.com/KangLin/FaceRecognizer)
- [TransformCoordinate](https://github.com/KangLin/TransformCoordinate)
- [Chinese chess control](https://github.com/KangLin/ChineseChessControl)
### Donation

### License
[License](License.md "License.md")