A Qt6 QML plugin example built with CMake for UniDesk/Uniquenium, featuring fully independent build systems for the main application and plugins, with QML-to-C++ integration.
This plugin follows the same architecture as OfficialPlugin, including:
- Plugin System: Based on Qt plugin mechanism + QML dynamic loading
- BackendAll: Singleton for translation management and cross-component communication
- ExamplePlugin: Component module containing QML and backend
- Settings: Plugin settings page with independent storage
- SignalHandler: Plugin signal handler for main program signal reception
- Translation: Multi-language support via Qt Linguist
uq-plugin-example/
├── CMakeLists.txt # Build configuration
├── Plugin.h / Plugin.cpp # Plugin entry, register QML types
├── BackendAll.h / BackendAll.cpp # Singleton, translation management
├── ExamplePlugin/ # Component module
│ ├── ExamplePlugin.qml # Component QML
│ ├── ExamplePluginOptions.qml # Component options page
│ ├── ExamplePluginBackend.h # Component backend header
│ ├── ExamplePluginBackend.cpp # Component backend implementation
│ └── qmldir # QML module definition
├── Settings.qml # Plugin settings page
├── SignalHandler.qml # Signal handler
├── plugin-info.json # Plugin metadata
├── defaultSettings.json # Default settings
├── singleton.h / stdafx.h # Utility headers
├── translations/ # Translation files
│ ├── BackendAll_zh_CN.ts
│ └── BackendAll_en_US.ts
├── media/ # Resource files
└── deploy.bat # Packaging script
- Open
CMakeLists.txtin Qt Creator - Select Release configuration
- Build the project (Build > Build Project)
Run deploy.bat to extract the build output to dist/ directory:
deploy.bat # Normal packaging (auto-finds temp/bin under build/)
deploy.bat --clean # Clean dist/ first
deploy.bat --build-dir <path> # Specify build output directory
deploy.bat --build-dir=<path> # Use equals sign to specify path
deploy.bat -b <path> # Short form
deploy.bat "<path>" # Pass path directlyExamples:
deploy.bat --build-dir "build\Qt_MSVC2022_64bit-Release\temp\bin"
deploy.bat -b "build\Qt_MSVC2022_64bit-Release\temp\bin"
deploy.bat "build\Qt_MSVC2022_64bit-Release\temp\bin"- Build and package the plugin
- Copy the
dist/uq-plugin-example/folder to:<Uniquenium-install>/data/plugins/uq-plugin-example/- or
%APPDATA%/Uniquenium/Plugins/uq-plugin-example/
- Restart Uniquenium
- Modify plugin info: Edit
plugin-info.jsonto change plugin ID, name, author, etc. - Add new components: Create QML files in a new subdirectory, add
qmldir, and register inplugin-info.json - Add new backends: Create C++ classes in the component directory and register them in
Plugin::registerQmlTypes() - Update translations: Edit
.tsfiles intranslations/directory - Add resources: Place images, etc. in
media/directory
- Independent Build: Each plugin has its own CMake configuration
- QML Singleton: BackendAll provides singleton access via
QML_SINGLETON - Translation Support: Multi-language switching via
BackendAll.retranslate() - Plugin Settings: Independent settings storage via
UniDeskSettingswithpluginId - Signal System: Receive main program signals via
SignalHandler.qml - Auto Packaging: One-click packaging via
deploy.bat