{"id":50525990,"url":"https://github.com/sorrowfeng/qt-ant-design","last_synced_at":"2026-06-03T08:00:50.585Z","repository":{"id":353090928,"uuid":"1217940654","full_name":"sorrowfeng/qt-ant-design","owner":"sorrowfeng","description":"Implementing Ant Design with Qt Widget","archived":false,"fork":false,"pushed_at":"2026-05-29T12:22:16.000Z","size":8497,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T14:03:54.941Z","etag":null,"topics":["ant-design","cpp","gui","qt","widget"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sorrowfeng.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-22T11:24:16.000Z","updated_at":"2026-05-29T12:22:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"5f570091-935f-48a7-a26d-8984c9d158db","html_url":"https://github.com/sorrowfeng/qt-ant-design","commit_stats":null,"previous_names":["sorrowfeng/qt-ant-design"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sorrowfeng/qt-ant-design","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sorrowfeng%2Fqt-ant-design","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sorrowfeng%2Fqt-ant-design/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sorrowfeng%2Fqt-ant-design/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sorrowfeng%2Fqt-ant-design/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sorrowfeng","download_url":"https://codeload.github.com/sorrowfeng/qt-ant-design/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sorrowfeng%2Fqt-ant-design/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33854119,"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-06-03T02:00:06.370Z","response_time":59,"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":["ant-design","cpp","gui","qt","widget"],"created_at":"2026-06-03T08:00:49.964Z","updated_at":"2026-06-03T08:00:50.577Z","avatar_url":"https://github.com/sorrowfeng.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# qt-ant-design\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/qt-ant-design-icon.png\" alt=\"qt-ant-design logo\" width=\"160\"\u003e\n\u003c/p\u003e\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Qt](https://img.shields.io/badge/Qt-6%20%7C%205-green.svg)](https://www.qt.io)\n[![CMake](https://img.shields.io/badge/CMake-3.16+-blue.svg)](https://cmake.org)\n[![C++](https://img.shields.io/badge/C%2B%2B-17-blue.svg)](https://en.cppreference.com)\n[![Release](https://img.shields.io/github/v/release/sorrowfeng/qt-ant-design)](https://github.com/sorrowfeng/qt-ant-design/releases)\n[![GitHub Stars](https://img.shields.io/github/stars/sorrowfeng/qt-ant-design?style=social)](https://github.com/sorrowfeng/qt-ant-design/stargazers)\n[![Last Commit](https://img.shields.io/github/last-commit/sorrowfeng/qt-ant-design)](https://github.com/sorrowfeng/qt-ant-design/commits/main)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/sorrowfeng/qt-ant-design)\n\nEnglish | [简体中文](README.zh-CN.md)\n\n`qt-ant-design` is a C++ component library built on Qt Widgets that auto-detects Qt 6 or Qt 5 at configure time and ports the Ant Design system to native desktop widgets.\n\nOnline documentation: [www.sorrowfeng.top/qt-ant-design](http://www.sorrowfeng.top/qt-ant-design/)\n\nThe project focuses on:\n\n- Dynamic light / dark theme switching\n- Faithful reproduction of Ant Design's interactions and state styles\n- A maintainable desktop rendering stack built on `QPainter` / `QProxyStyle`\n\n\u003e Current implementation and visual-audit status are tracked in [docs/project-status.md](docs/project-status.md) and [docs/visual-audit.md](docs/visual-audit.md).\n\n\u003e Current version: `0.1.0`. Versioning and release steps are tracked in [docs/versioning.md](docs/versioning.md), and release notes are in [CHANGELOG.md](CHANGELOG.md).\n\n\u003e Issues and PRs are welcome: visual mismatches, missing interactions, Qt integration problems, documentation gaps, component fixes, tests, examples, and docs improvements are all appreciated.\n\n## Showcase\n\n| Light | Dark |\n| --- | --- |\n| ![Qt showcase light](resources/images/showcase-light.png) | ![Qt showcase dark](resources/images/showcase-dark.png) |\n\n## Features\n\n- Built on Qt Widgets — lightweight, easy to embed, and consumable as either a static or shared library in existing projects\n- Built-in Design Token system with real-time light / dark theme switching\n- `89` public components ported so far (full coverage of Ant Design's `70 / 70` standard components, plus `19` Qt / desktop extension components)\n- `67` style-driven components are rendered through a `QProxyStyle` architecture\n- The example app currently demos `89 / 89` public components, plus a standalone Ant Design homepage-style `Showcase`\n- `AntIcon` bundles `831` official SVG resources from `@ant-design/icons-svg@4.4.2`\n- Comparable standard components are tracked as visual-audit `Pass`; Qt-only desktop extensions are tracked as `Local Pass`\n- Clean code structure — `core / styles / widgets / examples` layering keeps the project easy to extend\n\n## Current Status\n\n- Status snapshot: [docs/project-status.md](docs/project-status.md)\n- Per-component reliability coverage: [docs/reliability-coverage.md](docs/reliability-coverage.md)\n- Per-component performance optimization progress: [docs/performance-optimization.md](docs/performance-optimization.md)\n- Visual audit matrix: [docs/visual-audit.md](docs/visual-audit.md)\n- Online component/API reference: [www.sorrowfeng.top/qt-ant-design/components](http://www.sorrowfeng.top/qt-ant-design/components/)\n- Local Chinese component/API reference: [docs/component-api-overview-cn.html](docs/component-api-overview-cn.html)\n- Official icon inventory: [docs/ant-design-icons.md](docs/ant-design-icons.md)\n- Current CTest entry count: `47`; latest full component reliability sweep: `37 / 37` passed on `2026-05-30`; targeted Qt5/Qt6 visual parity, visual-atlas scale-factor smoke, metric audit, real example page traversal/comparison, Windows High DPI scaling, and no-QSS guard checks passed on `2026-06-01`\n\n## Recent Ant Design Parity Updates\n\nThe 2026-04-30 interaction and motion pass tightened several user-visible details:\n\n- Popup feedback: `AntPopover`, `AntMessage`, and `AntNotification` now have more stable hover/close behavior, stronger elevation, and placement-aware enter/exit motion. `AntMessage` and `AntNotification` also scope their placement to the supplied anchor window: hidden anchors suppress premature popups, visible `AntWindow` anchors are tracked across move / resize / show / hide / state changes, and multiple windows keep their feedback stacks isolated. Passive overlays avoid stealing covered-control clicks: Message forwards its click, while Tooltip, Slider value bubbles, and Watermark are mouse-transparent.\n- Popup shells: shared popup elevation now uses a softer multi-layer feather outside the panel body, so `AntDropdown`, `AntMenu`, selector popups, `AntColorPicker`, `AntDatePicker`, `AntTimePicker`, and `AntModal` keep AntD-like shadows in light and dark themes.\n- Motion: `AntCarousel`, `AntTabs`, `AntSkeleton`, `AntSpin`, `AntInputNumber`, `AntSwitch`, and loading buttons now better match Ant Design timing, direction, and state feedback.\n- Data interaction: `AntTransfer` now supports scrolling and header select-all correctly, while `AntTable` sorter clicks reorder rows instead of only changing the icon state.\n- Input feedback: `AntPlainTextEdit` supports TextArea-style bottom-right resizing, and `AntSlider` shows a value bubble while dragging.\n\n## Recent Desktop Window Updates\n\nThe 2026-05-07 `AntWindow` pass improved native desktop behavior and title-bar polish:\n\n- Windows 11 Snap support for frameless windows: resize edges/corners, draggable title bar, maximize-button Snap Layout hover, edge snapping, and drag-to-restore.\n- DWM-backed rounded corners, border/shadow integration, and a `cornerRadius` API for Windows builds while keeping platform-specific code behind Qt/Win32 guards.\n- Windows 10 uses a no-caption native frame path plus a legacy rounded mask and a transparent software shadow host, so maximized/restored windows do not expose native title buttons and normal windows keep a lightweight Win11-like four-sided outer shadow that starts at the window edge with cleaner rounded corners before and after resize.\n- Topmost toggles on visible Windows windows now use native `SetWindowPos` in place, avoiding the hide/show cycle that caused a visible flash.\n- Title-bar pin and light/dark theme buttons use bundled official Ant Design icons, and every title-bar button can be shown or hidden through public APIs.\n- The built-in theme button uses a captured-frame crossfade overlay so full-window light/dark switching feels continuous.\n\n## Recent Qt API Compatibility Updates\n\nThe 2026-05-07 API pass improves use with Qt object trees and familiar Qt widget conventions:\n\n- `AntInput`, `AntInputNumber`, `AntCheckBox`, `AntRadio`, `AntSlider`, `AntProgress`, and `AntStatusBar` expose more common Qt-style methods and signals; `AntInputNumber` defaults to integer display and enables QDoubleSpinBox-style decimal value/range/step behavior through `setDecimals()` or `setPrecision()`.\n- `AntSelect` supports QComboBox-style item management, default first-item selection when an empty select receives data, plus option-style helpers such as `setOptionText`, `removeOption`, `optionData`, `findData`, `currentData`, `activated`, and highlighted signals.\n- Qt layout behavior now follows native widget baselines: line-edit-like controls expand horizontally, combo-like selectors stay `Preferred/Fixed`, spin/date/time editors stay `Minimum/Fixed`, view widgets expand in both directions, and `AntTypography` mirrors `QLabel` height-for-width word wrapping.\n- `AntTabs` clears default root layout margins on added content pages so tab panes do not double up with `AntCard` / `AntWidget` padding, while preserving explicitly customized margins; `AntTabs::useTabContentLayout()` can force zero margins when needed.\n- `AntDatePicker` / `AntTimePicker` expose QDateEdit / QTimeEdit-style `date` / `time` aliases plus minimum / maximum range APIs.\n- `AntList` / `AntListWidget` now cover common QListWidget-style flows: string item add/insert/find/sort, item text/icon/data/check state/flags, current row/item, selection mode, selected items, internal scrolling, `scrollToItem`, and item/current/selection signals. `AntTable` exposes `rows()`, `selectRow()`, `currentRowIndex()`, and row tooltips; `AntTree` exposes matching tree helper APIs.\n- `AntMenu` now mirrors QWidget `QAction` additions, changes, removals, and trigger flow; `AntToolButton` / `AntToolBar` keep their inherited QAction behavior covered by tests.\n- `AntTypography` defaults to vertical center alignment and exposes alignment, word-wrap, clear, and `setPixelSize()` controls; `setEnabled()` and `setDisabled()` stay synchronized with its disabled visual and interaction state.\n- `AntDesign::configureHighDpi()` plus `AntDesign::initialize(\u0026app)` provide the recommended startup path: Qt5 enables logical High DPI scaling and High DPI pixmaps before `QApplication`, then the library registers resources, bundled fonts, and the theme singleton after the app exists. `initialize()` also calls `configureHighDpi()` automatically when it is invoked before `QApplication`, but it still needs to be called again with the created app for fonts and theme setup.\n- `AntRibbon` adds a lightweight Ribbon surface with pages, groups, balanced large/small actions, embedded Ant/Qt widgets, animated tab/collapse transitions, collapsed popup mode, and `AntWindow::setRibbon()` integration.\n\n## Installation \u0026 Integration\n\n### Requirements\n\n- Qt `6.5+`\n- CMake `3.16+`\n- C++17\n\n### Option 1: Add as a CMake subdirectory\n\n```bash\ngit submodule add https://github.com/sorrowfeng/qt-ant-design.git third_party/qt-ant-design\ngit submodule update --init --recursive\n```\n\n```cmake\ncmake_minimum_required(VERSION 3.16)\nproject(my-qt-app LANGUAGES CXX)\n\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\nfind_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Widgets)\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Widgets)\n\nadd_subdirectory(third_party/qt-ant-design)\n\nadd_executable(my-qt-app main.cpp)\ntarget_link_libraries(my-qt-app PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets qt-ant-design)\n```\n\n### Option 2: Install and use the CMake package\n\n```bash\ncmake -S . -B build -DCMAKE_INSTALL_PREFIX=/path/to/install\ncmake --build build --config Release\ncmake --install build --config Release\n```\n\nThen point your consumer project at the install prefix:\n\n```cmake\nfind_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Widgets Svg)\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Widgets Svg)\nfind_package(qt-ant-design CONFIG REQUIRED)\n\nadd_executable(my-qt-app main.cpp)\ntarget_link_libraries(my-qt-app PRIVATE\n    qt-ant-design::qt-ant-design\n)\n```\n\nConfigure the consumer with `-DCMAKE_PREFIX_PATH=/path/to/install` if the prefix is not already on CMake's package search path.\n\nOn Windows you can also run the example app from the install directory directly:\n\n```powershell\n.\\install\\bin\\qt-ant-design-example.exe\n```\n\n## Quick Start\n\n```bash\ngit clone https://github.com/sorrowfeng/qt-ant-design.git\ncd qt-ant-design\nmkdir build \u0026\u0026 cd build\ncmake .. -DCMAKE_PREFIX_PATH=/path/to/Qt\ncmake --build .\n```\n\nUse `-DBUILD_SHARED_LIBS=ON` to build `qt-ant-design` as a shared library; omit it or set it to `OFF` for the default static build.\n\nOn Windows / multi-config generators, the recommended workflow is:\n\n```powershell\ncmake -S . -B build -DCMAKE_INSTALL_PREFIX=D:/Project/GitProject/qt-ant-design/install\ncmake --build build --config Debug\ncmake --install build --config Debug\n.\\install\\bin\\qt-ant-design-example.exe\n```\n\n### Your first `AntButton`\n\nCall `AntDesign::configureHighDpi()` before creating `QApplication`, then call `AntDesign::initialize(\u0026app)` once before creating Ant widgets. This keeps Qt5 and Qt6 layouts in Qt logical pixels on Windows at 100%, 125%, 150%, and other scale factors. If `initialize()` is called before `QApplication`, it will configure High DPI automatically and return; call it again after app creation to finish resource, font, and theme initialization.\n\n```cpp\n#include \u003cQApplication\u003e\n#include \u003cQVBoxLayout\u003e\n#include \u003cQWidget\u003e\n\n#include \"core/AntDesign.h\"\n#include \"widgets/AntButton.h\"\n\nint main(int argc, char* argv[])\n{\n    AntDesign::configureHighDpi();\n\n    QApplication app(argc, argv);\n    AntDesign::initialize(\u0026app);\n\n    QWidget window;\n    auto* layout = new QVBoxLayout(\u0026window);\n\n    auto* button = new AntButton(\"Primary\");\n    button-\u003esetButtonType(Ant::ButtonType::Primary);\n    layout-\u003eaddWidget(button);\n\n    window.resize(360, 200);\n    window.show();\n\n    return app.exec();\n}\n```\n\n## Ported Components\n\nTotal public components implemented: `89`\n\n`src/widgets` currently contains `109` `Ant*.h` headers: `89` public component headers, `19` Qt-style alias headers, and the internal non-installed popup helper `AntSelectPopup`.\n\nAnt Design standard components are counted by the top-level directories under [`ant-design/ant-design`](https://github.com/ant-design/ant-design)'s `components/` directory, with `row / col` rolled into `grid`, `back-top` rolled into `float-button`, and `qrcode` treated as a compatibility alias for `qr-code` — yielding a baseline of `70` standard components.\n\n### Qt-Style Aliases\n\nSeveral components can also be included with Qt-style names when the Ant Design name is not a natural match: `AntLabel` → `AntTypography`, `AntLineEdit` → `AntInput`, `AntComboBox` → `AntSelect`, `AntSpinBox` / `AntDoubleSpinBox` → `AntInputNumber`, `AntPushButton` → `AntButton`, `AntProgressBar` → `AntProgress`, `AntCalendarWidget` → `AntCalendar`, `AntTabWidget` → `AntTabs`, `AntMainWindow` → `AntWindow`, plus list/table/tree view-style aliases.\n\nFor names that only differ by casing from Qt, the Qt casing is canonical: use `AntCheckBox` and `AntToolTip`.\n\n| Category | Components | Rendering |\n| --- | --- | --- |\n| General | `AntButton` `AntFloatButton` `AntIcon` `AntTypography` | `QProxyStyle` |\n| Navigation | `AntAnchor` `AntBreadcrumb` `AntDropdown` `AntMenu` `AntPagination` `AntSteps` `AntTabs` | Mixed (`QProxyStyle` / custom paint) |\n| Data Entry | `AntAutoComplete` `AntCascader` `AntCheckBox` `AntColorPicker` `AntDatePicker` `AntDescriptions` `AntForm` `AntInput` `AntInputNumber` `AntMentions` `AntRadio` `AntRate` `AntSegmented` `AntSelect` `AntSlider` `AntSwitch` `AntTimePicker` `AntTransfer` `AntTreeSelect` `AntUpload` | Mixed (`QProxyStyle` / custom paint) |\n| Feedback | `AntAlert` `AntDrawer` `AntMessage` `AntModal` `AntNotification` `AntPopconfirm` `AntPopover` `AntProgress` `AntResult` `AntSkeleton` `AntSpin` `AntToolTip` `AntTour` `AntWatermark` | Mixed (`QProxyStyle` / custom paint) |\n| Data Display | `AntAvatar` `AntBadge` `AntCalendar` `AntCard` `AntCarousel` `AntCollapse` `AntEmpty` `AntImage` `AntList` `AntQRCode` `AntStatistic` `AntTable` `AntTag` `AntTimeline` `AntTree` | Mixed (`QProxyStyle` / custom paint) |\n| Layout \u0026 Misc | `AntAffix` `AntApp` `AntConfigProvider` `AntDivider` `AntFlex` `AntGrid` `AntLayout` `AntMasonry` `AntSpace` `AntSplitter` `AntWidget` `AntWindow` | Mixed (`QProxyStyle` / custom paint / QObject helper) |\n| Qt / Desktop Extensions | `AntDialog` `AntInputDialog` `AntDockManager` `AntDockWidget` `AntFileDialog` `AntLog` `AntMenuBar` `AntNav` `AntNavItem` `AntPlainTextEdit` `AntRibbon` `AntScrollArea` `AntScrollBar` `AntStackedWidget` `AntStatusBar` `AntToolBar` `AntToolButton` | Mixed (`QProxyStyle` / custom paint) |\n\n### Component Screenshots\n\nLight and dark thumbnails are generated from the example pages; interactive controls capture a representative open/active state where useful.\n\n| Category | Component | Light | Dark |\n| --- | --- | --- | --- |\n| General | `AntButton` | \u003cimg src=\"resources/images/components/ant-button-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-button-dark.png\" width=\"360\"\u003e |\n| General | `AntIcon` | \u003cimg src=\"resources/images/components/ant-icon-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-icon-dark.png\" width=\"360\"\u003e |\n| General | `AntTypography` | \u003cimg src=\"resources/images/components/ant-typography-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-typography-dark.png\" width=\"360\"\u003e |\n| Layout | `AntDivider` | \u003cimg src=\"resources/images/components/ant-divider-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-divider-dark.png\" width=\"360\"\u003e |\n| Layout | `AntFlex` | \u003cimg src=\"resources/images/components/ant-flex-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-flex-dark.png\" width=\"360\"\u003e |\n| Layout | `AntGrid` | \u003cimg src=\"resources/images/components/ant-grid-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-grid-dark.png\" width=\"360\"\u003e |\n| Layout | `AntLayout` | \u003cimg src=\"resources/images/components/ant-layout-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-layout-dark.png\" width=\"360\"\u003e |\n| Layout | `AntSpace` | \u003cimg src=\"resources/images/components/ant-space-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-space-dark.png\" width=\"360\"\u003e |\n| Layout | `AntSplitter` | \u003cimg src=\"resources/images/components/ant-splitter-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-splitter-dark.png\" width=\"360\"\u003e |\n| Navigation | `AntAffix` | \u003cimg src=\"resources/images/components/ant-affix-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-affix-dark.png\" width=\"360\"\u003e |\n| Navigation | `AntAnchor` | \u003cimg src=\"resources/images/components/ant-anchor-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-anchor-dark.png\" width=\"360\"\u003e |\n| Navigation | `AntBreadcrumb` | \u003cimg src=\"resources/images/components/ant-breadcrumb-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-breadcrumb-dark.png\" width=\"360\"\u003e |\n| Navigation | `AntDropdown` | \u003cimg src=\"resources/images/components/ant-dropdown-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-dropdown-dark.png\" width=\"360\"\u003e |\n| Navigation | `AntMenu` | \u003cimg src=\"resources/images/components/ant-menu-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-menu-dark.png\" width=\"360\"\u003e |\n| Navigation | `AntPagination` | \u003cimg src=\"resources/images/components/ant-pagination-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-pagination-dark.png\" width=\"360\"\u003e |\n| Navigation | `AntSteps` | \u003cimg src=\"resources/images/components/ant-steps-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-steps-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntAutoComplete` | \u003cimg src=\"resources/images/components/ant-auto-complete-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-auto-complete-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntCascader` | \u003cimg src=\"resources/images/components/ant-cascader-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-cascader-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntCheckBox` | \u003cimg src=\"resources/images/components/ant-checkbox-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-checkbox-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntColorPicker` | \u003cimg src=\"resources/images/components/ant-color-picker-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-color-picker-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntDatePicker` | \u003cimg src=\"resources/images/components/ant-date-picker-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-date-picker-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntForm` | \u003cimg src=\"resources/images/components/ant-form-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-form-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntInput` | \u003cimg src=\"resources/images/components/ant-input-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-input-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntInputNumber` | \u003cimg src=\"resources/images/components/ant-input-number-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-input-number-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntMentions` | \u003cimg src=\"resources/images/components/ant-mentions-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-mentions-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntRadio` | \u003cimg src=\"resources/images/components/ant-radio-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-radio-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntRate` | \u003cimg src=\"resources/images/components/ant-rate-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-rate-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntSelect` | \u003cimg src=\"resources/images/components/ant-select-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-select-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntSlider` | \u003cimg src=\"resources/images/components/ant-slider-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-slider-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntSwitch` | \u003cimg src=\"resources/images/components/ant-switch-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-switch-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntTimePicker` | \u003cimg src=\"resources/images/components/ant-time-picker-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-time-picker-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntTransfer` | \u003cimg src=\"resources/images/components/ant-transfer-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-transfer-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntTreeSelect` | \u003cimg src=\"resources/images/components/ant-tree-select-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-tree-select-dark.png\" width=\"360\"\u003e |\n| Data Entry | `AntUpload` | \u003cimg src=\"resources/images/components/ant-upload-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-upload-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntAvatar` | \u003cimg src=\"resources/images/components/ant-avatar-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-avatar-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntBadge` | \u003cimg src=\"resources/images/components/ant-badge-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-badge-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntCalendar` | \u003cimg src=\"resources/images/components/ant-calendar-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-calendar-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntCard` | \u003cimg src=\"resources/images/components/ant-card-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-card-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntCarousel` | \u003cimg src=\"resources/images/components/ant-carousel-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-carousel-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntCollapse` | \u003cimg src=\"resources/images/components/ant-collapse-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-collapse-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntDescriptions` | \u003cimg src=\"resources/images/components/ant-descriptions-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-descriptions-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntEmpty` | \u003cimg src=\"resources/images/components/ant-empty-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-empty-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntImage` | \u003cimg src=\"resources/images/components/ant-image-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-image-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntList` | \u003cimg src=\"resources/images/components/ant-list-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-list-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntPopover` | \u003cimg src=\"resources/images/components/ant-popover-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-popover-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntQRCode` | \u003cimg src=\"resources/images/components/ant-qr-code-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-qr-code-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntSegmented` | \u003cimg src=\"resources/images/components/ant-segmented-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-segmented-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntStatistic` | \u003cimg src=\"resources/images/components/ant-statistic-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-statistic-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntTable` | \u003cimg src=\"resources/images/components/ant-table-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-table-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntTabs` | \u003cimg src=\"resources/images/components/ant-tabs-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-tabs-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntTag` | \u003cimg src=\"resources/images/components/ant-tag-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-tag-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntTimeline` | \u003cimg src=\"resources/images/components/ant-timeline-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-timeline-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntToolTip` | \u003cimg src=\"resources/images/components/ant-tooltip-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-tooltip-dark.png\" width=\"360\"\u003e |\n| Data Display | `AntTree` | \u003cimg src=\"resources/images/components/ant-tree-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-tree-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntAlert` | \u003cimg src=\"resources/images/components/ant-alert-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-alert-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntDrawer` | \u003cimg src=\"resources/images/components/ant-drawer-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-drawer-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntMessage` | \u003cimg src=\"resources/images/components/ant-message-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-message-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntModal` | \u003cimg src=\"resources/images/components/ant-modal-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-modal-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntNotification` | \u003cimg src=\"resources/images/components/ant-notification-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-notification-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntPopconfirm` | \u003cimg src=\"resources/images/components/ant-popconfirm-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-popconfirm-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntProgress` | \u003cimg src=\"resources/images/components/ant-progress-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-progress-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntResult` | \u003cimg src=\"resources/images/components/ant-result-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-result-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntSkeleton` | \u003cimg src=\"resources/images/components/ant-skeleton-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-skeleton-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntSpin` | \u003cimg src=\"resources/images/components/ant-spin-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-spin-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntTour` | \u003cimg src=\"resources/images/components/ant-tour-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-tour-dark.png\" width=\"360\"\u003e |\n| Feedback | `AntWatermark` | \u003cimg src=\"resources/images/components/ant-watermark-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-watermark-dark.png\" width=\"360\"\u003e |\n| Other | `AntApp` | \u003cimg src=\"resources/images/components/ant-app-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-app-dark.png\" width=\"360\"\u003e |\n| Other | `AntConfigProvider` | \u003cimg src=\"resources/images/components/ant-config-provider-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-config-provider-dark.png\" width=\"360\"\u003e |\n| Other | `AntFloatButton` | \u003cimg src=\"resources/images/components/ant-float-button-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-float-button-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntDialog` | \u003cimg src=\"resources/images/components/ant-dialog-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-dialog-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntInputDialog` | \u003cimg src=\"resources/images/components/ant-input-dialog-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-input-dialog-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntWindow` | \u003cimg src=\"resources/images/components/ant-window-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-window-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntWidget` | \u003cimg src=\"resources/images/components/ant-widget-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-widget-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntScrollArea` | \u003cimg src=\"resources/images/components/ant-scroll-area-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-scroll-area-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntScrollBar` | \u003cimg src=\"resources/images/components/ant-scroll-bar-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-scroll-bar-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntStackedWidget` | \u003cimg src=\"resources/images/components/ant-stacked-widget-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-stacked-widget-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntStatusBar` | \u003cimg src=\"resources/images/components/ant-status-bar-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-status-bar-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntRibbon` | \u003cimg src=\"resources/images/components/ant-ribbon-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-ribbon-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntMenuBar` | \u003cimg src=\"resources/images/components/ant-menu-bar-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-menu-bar-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntToolBar` | \u003cimg src=\"resources/images/components/ant-tool-bar-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-tool-bar-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntToolButton` | \u003cimg src=\"resources/images/components/ant-tool-button-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-tool-button-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntDockWidget` | \u003cimg src=\"resources/images/components/ant-dock-widget-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-dock-widget-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntFileDialog` | \u003cimg src=\"resources/images/components/ant-file-dialog-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-file-dialog-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntPlainTextEdit` | \u003cimg src=\"resources/images/components/ant-plain-text-edit-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-plain-text-edit-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntLog` | \u003cimg src=\"resources/images/components/ant-log-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-log-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntNav` | \u003cimg src=\"resources/images/components/ant-nav-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-nav-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntNavItem` | \u003cimg src=\"resources/images/components/ant-nav-item-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-nav-item-dark.png\" width=\"360\"\u003e |\n| Qt Extensions | `AntMasonry` | \u003cimg src=\"resources/images/components/ant-masonry-light.png\" width=\"360\"\u003e | \u003cimg src=\"resources/images/components/ant-masonry-dark.png\" width=\"360\"\u003e |\n\n### Component Highlights\n\n- `AntButton`: five types, three sizes, three shapes, `loading / danger / ghost / block`\n- `AntIcon`: `831` official SVG icons, string-name API, `Outlined / Filled / TwoTone`, rotation, spin, custom paths\n- `AntInput`: sizes, states, `addonBefore / addonAfter / allowClear / password`\n- `AntInputNumber`: sizes, states, variants, prefix/suffix, QDoubleSpinBox-style decimals/precision, fine-grained step, optional control buttons\n- `AntDescriptions`: title, extra, columns, bordered, vertical, custom value widgets\n- `AntForm`: `AntForm / AntFormItem`, horizontal / vertical / inline layouts, label alignment, required marker, help and validation hints\n- `AntEmpty`: default illustration, `simple` mode, description text, custom illustration size and extra action\n- `AntDropdown`: `hover / click / contextMenu` triggers, placement, arrow, auto flip\n- `AntSteps`: horizontal / vertical layout, current step, error state, click to switch, title / description / subtitle\n- `AntSelect`: sizes, states, variants, `allowClear / loading / popup`, option text/data management\n- `AntAlert`: `success / info / warning / error`, icon, description, closable, banner, custom action\n- `AntModal`: mask, title, body, custom content, custom footer, confirm / cancel, centered or top-offset layout, and a soft outer shadow that fades before the dialog edge\n- `AntResult`: status icons (success / error / warning / info), transparent icon background in dark mode, title, description, custom extra actions area\n- `AntList`: `header / footer / bordered / split / size`; `AntListItem` supports `Meta` (avatar, title, description), `AntIcon` / image media, action areas, internal scrolling, and QListWidget-style text/data/selection helpers through the `AntListWidget` alias\n- `AntStatistic`: numeric display, thousands separators, prefix / suffix, precision control\n- `AntPopover`: title, body, action, click / hover triggers, placement, arrow\n- `AntPopconfirm`: confirm title, description, confirm / cancel buttons, disabled state, placement, and a one-piece popup arrow surface\n- `AntSkeleton`: moving `active` shimmer, avatar placeholder, title / paragraph configuration, rounded style, and `loading` toggle to swap in real content\n- `AntToolTip`: common `placement`, arrow, color, delayed display, auto flip, and mouse-transparent passive display\n- `AntSlider`: horizontal / vertical, `reverse / dots / included`, range, marks, drag value bubble above the active handle with a one-piece arrow surface that does not block pointer input\n- `AntRibbon`: pages and groups for large/small actions, embedded Ant/Qt widgets, animated tab/collapse transitions, collapsed popup mode, and `AntWindow` top-area integration\n- `AntSwitch`: `checked / loading / small / text`, click wave feedback\n- `AntSpin`: `small / middle / large / percent / delay`, smoother high-frequency animation\n- `AntDatePicker` / `AntTimePicker`: hand-painted popup pickers\n- `AntMessage` / `AntNotification`: global feedback components with elevated surfaces, enter / exit motion, anchor-scoped `AntWindow` following, multi-window stack isolation, Message click-through to covered controls, and Notification progress bars for both auto-close countdowns and manually controlled download/task progress\n- `AntCard` / `AntTag` / `AntBadge` / `AntAvatar`: common display components\n- `AntMenu` / `AntTabs` / `AntBreadcrumb` / `AntPagination`: navigation components; `AntPagination` includes editable quick-jumper paging, and `AntTabs` includes tab-pane layout margin normalization helpers\n- `AntTable`: data table with column sorting, row selection (checkbox / radio), programmatic row selection, row tooltips, pagination, loading state\n- `AntTree`: tree control with expand / collapse, node selection, checkboxes, connector lines\n- `AntUpload`: file upload supporting text list, picture list, and picture card modes\n- `AntCascader`: cascading selector with multi-column popup, click / hover expansion\n- `AntTreeSelect`: tree selector that renders a tree inside a dropdown\n- `AntRate`: rating component with `count / value / allowHalf / allowClear / disabled / size`, hover scaling, selected-star scale pulse, left / right keyboard control\n- `AntWidget`: base QWidget subclass that handles theme switching automatically\n- `AntTypography`: theme-aware text component, Title (H1-H5) / Text / Paragraph, with type / decoration / copy / ellipsis / alignment / pixel-size support\n- `AntWindow`: frameless window with custom title bar, pin / theme / minimize / maximize / close buttons, Windows 11 Snap support, softened Windows 10 outline/shadow handling, Windows 10/11 DWM border shadow, and a smooth theme transition overlay\n- `AntDrawer`: sliding panel with Left / Right / Top / Bottom placement, animation, and mask\n- `AntStatusBar`: status bar with left / right items, separators, message area, and size grip\n- `AntScrollBar`: custom 8 px slim scrollbar with auto-hide and no arrow buttons\n- `AntSegmented`: segmented control with value and index selection APIs, evenly distributed options, animated indicator, icon / disabled / tooltip support, and reliable full-track click hit testing\n- `AntFloatButton`: floating action button — circle / square, Primary / Default, expandable Group, BackTop, Badge, click feedback, and unclipped elevation shadow\n- `AntWatermark`: mouse-transparent watermark overlay with rotated tiled text, multi-line content, and customizable font / color / spacing / offset / angle\n- `AntQRCode`: QR code display with embedded byte-mode + Reed-Solomon generator (no external dependency), default repository URL payload, editable regenerate example, status overlays (expired / loading / scanned), icon, no border\n- `AntAffix`: pin helper — a QObject utility that watches the scroll container and auto-pins / un-pins while preserving layout\n- `AntAutoComplete`: autocomplete input with popup suggestions and keyboard navigation\n- `AntCalendar`: calendar panel with Day / Month / Year mode switching and date selection\n- `AntCarousel`: carousel with autoplay, dot indicators, arrow buttons, previous / next slots, slide-click signals, animated slide transitions, and click-to-page\n- `AntCollapse`: collapse panel / accordion with InOutCubic expand animation and accordion exclusivity\n- `AntColorPicker`: inline color trigger with optional text, plus popup HS field + value slider + RGB / HSV inputs, preset and custom colors\n- `AntImage`: image display with placeholder fallback and click-to-fullscreen preview\n- `AntTransfer`: transfer component with two scrollable lists, header select-all, and batch movement\n- `AntTour`: masked step-by-step guide with target highlighting, direct step launch, and Prev / Next / Finish\n- `AntMentions`: `@` mentions input that pops suggestions on `@`\n- `AntGrid` (Row/Col): 24-column grid with span / offset / gutter\n- `AntFlex`: flex layout container with gap / wrap / vertical\n- `AntMasonry`: masonry layout (shortest-column-first)\n- `AntSplitter`: draggable splitter with theme-colored handle\n- `AntAnchor`: scroll anchor navigation with active link highlighting\n- `AntApp`: application wrapper providing message / modal / notification context\n- `AntConfigProvider`: global configuration for theme / primary color / font size / border radius\n- `AntToolButton`: QToolButton + QProxyStyle with dropdown arrow animation\n- `AntMenuBar`: themed QMenuBar\n- `AntToolBar`: themed QToolBar with floating shadow\n- `AntDockWidget` / `AntDockManager`: themed dock panels with custom title bars, a custom splitter/tab dock tree, center tab placement, serialized splitter/tab/floating layout perspectives, draggable tab reordering, tab/title context menus, programmatic floating and dock feature APIs, toggleable center / edge drop guide squares (`setDropGuideEnabled()`), deterministic guided drop placement that does not rely on Qt's native dock layout, threshold-activated translucent drag previews, manager-owned floating dock windows with AntWindow-style Windows native frame / DWM rounded corners and shadow handling, double-click maximize / restore, and drag-back-to-layout support\n- `AntDialog`: frameless QDialog replacement with an Ant token title bar, theme-aware child palettes, Ant scroll bars, close-button hover state, and a `contentWidget()` host for reusable dialog bodies\n- `AntInputDialog`: QInputDialog replacement built on `AntDialog`, covering text, integer, double, and item selection modes with Ant inputs, configurable buttons/options, and changed/selected signals\n- `AntScrollArea`: QScrollArea + AntScrollBar + touch gesture scrolling + optional mouse-drag scrolling that does not steal scrollbar drags\n- `AntStackedWidget`: QStackedWidget-compatible page stack with Ant token background, border painting, and Outlined / Filled / Borderless variants\n- `AntFileDialog`: fully custom Ant Design file dialog built on `AntDialog`, common places, a collapsed directory tree, file-list `QFileSystemModel` / `QTreeView` surfaces, Ant inputs/select/buttons, token-painted panels, and a scoped `QProxyStyle` for file views\n- `AntPlainTextEdit`: multi-line text editor with 3 variants, TextArea-style resize grip, and a context menu\n- `AntLog`: 5-level colored log output (Debug / Info / Success / Warning / Error) with timestamps\n\n## Usage Examples\n\n### AntButton\n\n```cpp\n#include \"widgets/AntButton.h\"\n\nauto* primary = new AntButton(\"Save\");\nprimary-\u003esetButtonType(Ant::ButtonType::Primary);\nprimary-\u003esetButtonSize(Ant::ButtonSize::Middle);\n\nauto* danger = new AntButton(\"Delete\");\ndanger-\u003esetDanger(true);\n```\n\n### AntInput\n\n```cpp\n#include \"widgets/AntInput.h\"\n\nauto* input = new AntInput();\ninput-\u003esetPlaceholderText(\"Please enter a name\");\ninput-\u003esetAllowClear(true);\ninput-\u003esetInputSize(Ant::InputSize::Large);\n```\n\n### AntCard\n\n```cpp\n#include \"widgets/AntCard.h\"\n#include \"widgets/AntTypography.h\"\n\nauto* card = new AntCard(\"User Profile\");\ncard-\u003esetExtra(\"More\");\ncard-\u003esetHoverable(true);\ncard-\u003ebodyLayout()-\u003eaddWidget(new AntTypography(\"Card content\"));\n```\n\n### Theme switching\n\n```cpp\n#include \"core/AntTheme.h\"\n\nAntTheme::instance()-\u003esetThemeMode(Ant::ThemeMode::Dark);\n```\n\nFor `QProxyStyle`-based components, `AntStyleBase::connectThemeUpdate\u003cT\u003e()` now refreshes only widgets owned by the style instance or its local parent subtree, falling back to a global widget scan only when no local target can be resolved. The style path caches size hints before the theme mode changes, then runs `polish / onThemeUpdate / update`; `updateGeometry()` is issued only when themed metrics actually changed. `AntWindow`'s built-in theme button wraps the repaint in a captured-frame crossfade overlay so full-window light/dark switches stay visually continuous.\n\n## Development Guide \u0026 Contributing\n\nThe project uses `AGENTS.md` as the AI collaboration spec and project sync document, tracking:\n\n- Ported component list\n- Visual audit checklist\n- Current architectural conventions\n- Example coverage\n- Build and install instructions\n\nThe per-component visual audit tracker lives in `docs/visual-audit.md`.\n\nWhen adding a new component, the recommended flow is:\n\n1. Read the API and styles in [`ant-design/ant-design`](https://github.com/ant-design/ant-design) under `components/\u003ccomponent\u003e/`\n2. Add `src/widgets/Ant\u003cName\u003e.h/.cpp`\n3. If style decoupling is needed, add `src/styles/Ant\u003cName\u003eStyle.h/.cpp`\n4. Add a demo page in `examples/ExampleWindow.cpp`\n5. Update `AGENTS.md` and `README.md`\n\nIssues and PRs are welcome.\n\n## Star History\n\n\u003ca href=\"https://www.star-history.com/?repos=sorrowfeng%2Fqt-ant-design\u0026type=date\u0026legend=top-left\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=sorrowfeng/qt-ant-design\u0026type=date\u0026theme=dark\u0026legend=top-left\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=sorrowfeng/qt-ant-design\u0026type=date\u0026legend=top-left\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/chart?repos=sorrowfeng/qt-ant-design\u0026type=date\u0026legend=top-left\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n\n## Acknowledgements\n\n- Thanks to Ant Design for the design system, component specs, and token foundation: [ant-design/ant-design](https://github.com/ant-design/ant-design)\n- Thanks to ElaWidgetTools for Qt widget references: [Liniyous/ElaWidgetTools](https://github.com/Liniyous/ElaWidgetTools)\n- Development note: 90%+ of this project was developed with Codex GPT-5.5; the rest was completed with Claude Code and Mimo v2.5 Pro.\n\n## License\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsorrowfeng%2Fqt-ant-design","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsorrowfeng%2Fqt-ant-design","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsorrowfeng%2Fqt-ant-design/lists"}