Fluent-Qt

Project updates

Releases and migrations

What changed in each release, and what to change in your code when you upgrade.

1.11.3

Latest

Adds trailing content for input fields, Transfer dual-list selection and caret completion, with editable-field and Gallery compatibility fixes.

  • LineEdit and ComboBox support plain-text suffixes and custom trailing widgets without changing edited values or caller ownership.
  • Editable ComboBox geometry stays stable after selection and model changes; the NumberBox drag indicator is centered across display scales.
  • Transfer provides searchable lists and batch selection transfers backed by stable keys, while preserving the source model and disabled states.
  • TextEdit caret geometry supports an editor-focused member-completion example with keyboard navigation and undo; the editing-command example retains height animation.
  • Gallery previews and source blocks use one shared frame, with responsive input examples and corrected redirected clipping on older Qt versions.
  • Build and release validation reuse compiler output and grouped test executables, with paired performance measurements and the existing validation coverage.

1.11.2

Fixes Windows headless window handling and adds disabled checkbox examples in the C++ and PySide6 Gallery.

  • Windows offscreen and minimal Qt windows skip native window styling and backdrop calls when Qt assigns a synthetic window ID.
  • The two-state checkbox example shows disabled checked and unchecked controls in both Gallery implementations.
  • The website offers an embedded Ko-fi tip panel and QR code alongside the existing CNY support options.
  • WebAssembly browser checks run in parallel on a shared build, and release CI reuses compatible wheels and candidate builds.

1.11.1

Migration required

Adds RangeSlider and ImageViewer, saved desktop Gallery zoom and paged search, with fixes for text alignment, overlays, and low-scale rendering.

  • RangeSlider provides two values, minimum spacing, keyboard steps and accessible thumbs; it shares the Slider appearance.
  • ImageViewer adds pointer-centered zoom, panning, fit modes, keyboard and pinch input, and cached thumbnails, including use inside FlipView.
  • Desktop Gallery saves 50%–200% interface zoom, preserves the native window frame and restored placement, and keeps editor focus when showing zoom controls.
  • Fractional and low-DPR rendering repairs preserve local paint regions. GPU-only frames do not force a full-window widget repaint.
  • Gallery search pages component and example results, cancels stale requests, and keeps browser accessibility geometry current.
  • Text and editable-field alignment, menu icon placement, SelectorBar overflow focus, popup effect captures, and native window geometry are corrected.
  • Desktop Gallery source builds require matching Qt private development headers; the base Widgets library still supports Qt 5.15+ and 6.2+ without this dependency.
  • Preview tools handle UTF-8 consistently, unchanged generated Python wrappers keep their timestamps, and local WSL validation reuses Linux-native workspaces.
  • Project updates now live in Releases and migrations. The standalone roadmap is removed; its old URLs open the release history in the same language.
  • The documentation sidebar now groups component categories under Components, icons under Foundations, and each extension guide with its components. Search expands matching branches and restores your expanded sections when cleared.
  • Live component examples now take the height their sample needs, so tall charts, grids and pickers no longer scroll inside a short frame. Dialog, menu and window examples keep extra room for their overlays.
  • The GitHub Sponsor button now lists a short link for each support tier. Each opens the homepage in your browser's language with that tier already selected.

1.11.0

Migration required

Makes particles optional, adds application-provided icon fonts, improves 3D rendering, and introduces stable-ABI Python wheels and bilingual upgrade guidance.

  • FontIcon adds fontFamily() and setFontFamily() for application-provided fonts. Pass the font's Unicode glyph directly; an empty family keeps the existing bundled Fluent icon rendering. C++ and PySide6 Gallery include a custom-font example.
  • Particle effects move out of the core library into the optional Particles module.
  • Gallery 3D uploads only the texture rows that changed, sharpens frames once motion stops, keeps its cache within a memory budget, and switches to 2D if rendering stays slow.
  • Desktop Debug builds link the release Qt runtime by default. Set FLUENT_QT_DEBUG_RELEASE_RUNTIME=OFF to use a debug Qt.
  • Open overlays follow their host surface; scrollbar thumb painting matches native hit testing, and PySide6 extension widgets enforce ownership boundaries.
  • Six stable-ABI native wheel builds retain 17 platform/interpreter installation checks. Immutable candidates are promoted without recompiling; CI uses bounded compiler parallelism and targeted website validation.
  • The website adds bilingual version history, migration comparisons, a roadmap and API notices for pending changes. Source-driven generation checks translation freshness.

ParticleBackdrop moves to the Particles module

The fluent::layout names and import paths are gone. Linking only FluentQt::FluentQt no longer includes particle effects.

When building from source, turn on FLUENT_QT_BUILD_PARTICLES. With an installed SDK, request COMPONENTS Particles and link FluentQt::Particles. Then update includes, namespaces and Python imports as shown below.

Before

FluentQt::FluentQt
#include <FluentQt/Layout.h>
fluent::layout::ParticleBackdrop
from fluentqt.layout import ParticleBackdrop

After

find_package(FluentQt CONFIG REQUIRED COMPONENTS Particles)
target_link_libraries(app PRIVATE FluentQt::Particles)
#include <FluentQt/Particles.h>
fluent::particles::ParticleBackdrop
from fluentqt.particles import ParticleBackdrop

Introduced in b674c94

1.10.3

New editing and selection controls, chart export, and a rebuilt documentation site.

  • NumberBox values can be dragged as well as typed, and a drag can be cancelled. PropertyPanel groups fields, finds them by name and resets them to defaults.
  • Charts save a PNG or export the source rows as CSV, for the visible range or all data.
  • AutoSuggestBox accepts asynchronous suggestions and drops stale ones. New: TagInput for tags with stable IDs and TreeSelect for picking from a tree model.
  • DataGrid can pin columns, and DataGridToolBar adds search, filters and column controls.
  • Each component page on the website shows a live example, C++ and PySide6 code, and the public API, in English and Chinese.

1.10.2

Adds CommandPalette, FormController and CodeBlock. Popup, Dialog and DrawerView share one set of backdrop blur and dimming options, and modal surfaces block clicks and shortcuts behind them.

1.10.1

CommandBar and CommandBarFlyout accept actions with nested FluentMenu submenus. TextEdit::appendPlainText() appends log lines without losing the selection or undo history. Unchecked check boxes and radio buttons have stronger outlines.

1.10.0

Adds DateTimeRangePicker, QmlBridge for hosting application QML pages in Widgets windows, and an optional Plugins module that handles extension dependencies, activation and cleanup. Python Live Scene now reloads previews in the same window.

1.9.3

Fixes window backgrounds at startup and during material changes. New windows no longer flash white in dark mode, and switching away from Mica or Acrylic keeps the old material until the new background is drawn.

1.9.1

Fixes the packaged 3D Gallery. Python wheels now include Spatial, Windows ARM64 renders with Direct3D 11, and the app falls back to 2D when hardware acceleration is unavailable.

  • The 1.9.0 wheels shipped without Spatial. Upgrade both FluentQt and FluentQt-Gallery to 1.9.1 to get the 3D Gallery.

1.9.0

Adds the optional Spatial module. SpatialView places ordinary widgets on 3D surfaces in perspective, and they keep their input handling and signals. The desktop and browser Galleries gain a 3D mode.

1.8.5

Adds a Charts module (line, area, bar, pie, donut, scatter and sparkline) drawn with Qt Widgets and no Qt Charts dependency, plus FileDropZone and FileListView. Toast has a new card style and an optional close button.

1.8.3

Adds ParticleBackdrop, a CPU-painted particle background, and a reusable SplashScreen. Also fixes keyboard selection and text editing, and makes Gallery source easier to read and copy.

1.8.2

UserTheme::applyOverrides() changes colors, corner radii and fonts for the whole app, and setThemeOverrides() does the same for a single component. ComboBox dropdowns now use custom fonts. Also fixes callback, navigation and slider bugs on supported Qt versions.

1.8.0

Adds a HighContrast theme and an app-wide MotionPolicy (Full, Reduced, Disabled) for C++, PySide6 and the browser Gallery. A focused TextEdit animates its auto-height changes.

1.7.6

MultiSelectComboBox joins selected labels with 、 instead of a translated “and”. Pickers and command bars drop duplicated internal code without behavior changes, and icon-only TabView buttons get accessible names. Release workflows pin their actions to reviewed revisions.

1.7.5

Buttons, toggle switches and date/time pickers follow the same fontRole rules, and an explicit setFont() still wins. Gallery samples behave the same in C++, PySide6 and WebAssembly. The build-fluentqt-gui Skill now runs from project analysis through independent review.

1.7.4

Native Gallery previews can replay pointer and keyboard actions before a capture, and reports include widget geometry and Inspector findings. Menu access keys keep working while menus animate. Local builds choose a parallel job count from available CPU and memory.

1.7.3

Live Scene keeps a PySide6 preview window open and refreshes it on save. CalendarView selection outlines are rounded, picker flyouts line up with their fields, and TeachingTip shadows spread evenly.

1.7.2

Adds MultiSelectComboBox, and fluentqt doctor, create and trial commands that check the local Qt setup and generate a starter C++ or PySide6 project. Also fixes several picker and list issues across platforms.

1.7.1

No library API changes. The website gets separate English and Chinese homepages, GitHub Discussions gets question and proposal forms, and stable releases wait for every Python wheel before publishing.

1.7.0

Migration required

Removes the Material and Cupertino design languages, leaving Fluent as the only one. Adds Field and DataGrid, and documents open, close and modal behavior for every overlay.

Design-language and style-theme APIs removed

DesignLanguage, StyleTheme and StyleThemeCatalog are gone, with no aliases. Apps that only used Fluent Light and Dark are unaffected.

Choose the appearance with Theme and customize tokens with UserTheme. In Python, use current_theme(), apply_user_theme(), set_accent_color() and reset_theme_tokens(). The Gallery ignores the old styleTheme setting.

Before

FluentElement::DesignLanguage
StyleTheme / StyleThemeCatalog
current_design_language()
apply_style_theme()

After

FluentElement::Theme
fluent::UserTheme
current_theme()
apply_user_theme()

1.6.4

Code samples in the browser Gallery can switch between C++ and PySide6. TextEdit respects custom content margins. The build-fluentqt-gui Skill scales its checks to the size of the app.

1.6.3

Ships the build-fluentqt-gui Skill for coding agents, with a component catalog that maps C++ and PySide6 APIs to Gallery samples. ListView gets a default delegate, and installed packages no longer embed build-machine SDK paths.

1.6.2

Adds opt-in WebAssembly support through FLUENT_QT_BUILD_WEBASSEMBLY_SUPPORT. The website embeds the C++ Gallery running in the browser. Desktop and PySide6 builds are unchanged.

1.6.0

First PySide6 release. The FluentQt wheel binds the component library, and FluentQt-Gallery installs the Gallery separately. The C++ library and the Qt 5.15 build are unchanged.

1.5.2

Adds CommandBar, CommandBarFlyout, and EditingCommandRouter for undo, copy, paste and related actions. Toast gains action buttons, pause on hover and in-place updates.

1.5.0

Migration required

Adds per-category headers such as <FluentQt/BasicInput.h>, typed font roles and selection modes, and explicit ownership for hosted widgets. Applications now provide their own localized picker and switch text.

Typed font roles, shared selection modes and explicit ownership

Code that passes font roles as strings, uses per-view selection enums, includes implementation headers, or relies on implicit ownership of hosted widgets needs updating.

Include public headers only, and pass WidgetOwnership where an API asks for it. Supply localized picker text, ToggleSwitch labels and accessible names from the application.

Before

"Body"
FlowSelectionMode / GridSelectionMode
ListSelectionMode / TreeSelectionMode

After

Typography::FontRole::Body
fluent::collections::SelectionMode
fluent::WidgetOwnership

1.4.2

Fixes AnchorLayout right and bottom anchors, QMLPlus state transitions, and access to bundled resources before QApplication exists. TextEdit forwards focus correctly and keeps undo history when its text is set again.

1.4.1

Controls stay sharp at fractional display scales up to 300%. Dialog and CoachMark open as overlays inside the owning window instead of separate native windows, which fixes frozen input on macOS.

1.4.0

Bundles its fonts and Fluent System Icons, so text and icons no longer depend on Segoe being installed. Adds Gallery pages for typography, color, icons and spacing, and follows the system display scale.

1.3.2

Date not recorded

Installed packages expose only an explicit list of public headers. Gallery component pages show the header, C++ type and CMake target, and switching pages is faster.

1.3.1

Date not recorded

The library now depends only on Qt Widgets; spdlog stays with the Gallery. Releases include a library-only source archive, and Gallery packages drop unused Qt modules.

1.3.0

Date not recorded

Adds Linux support for X11 and Wayland on x64 and ARM64, with Debian packages. Window::setBackdropEffect() provides one Mica/Acrylic API on every platform.