Releases: KDAB/cxx-qt
Releases Β· KDAB/cxx-qt
0.7.3
0.7.2
What's Changed
Added
impl cxx_qt::Initialize for X {}as shorthand forimpl cxx_qt::Constructor<()> for X {}extern "RustQt"blocks no longer have to be markedunsafe
Fixed
- cxx-qt-build: Use shorter paths to avoid file path length limitations on Windows
- CMake: Use Release Qt DLLs and runtime for MSVC Debug builds
- Fix some generated links to book page
#[inherit]attributes are no longer ignored inextern "C++Qt"blocks - they now trigger an error
Full Changelog: v0.7.1...v0.7.2
0.7.1
The GIT_TAG for this release is 0.7.1, (and not v0.7.1).
We will no longer use the v prefix for cxx-qt-cmake releases going forward.
We have chosen to make this change for two reasons:
- It's now consistent with version declarations in Cargo, which don't use the
vprefix - As the name is now consistent with our
0.7branch name, you can use GIT_TAG0.7to simply follow the latest patch release, similar to specifying "0.7" in Cargo.toml.
Added
- Allow creating a
QImagefrom animage::RgbaImage.
Fixed
- Prevent clippy from tripping lint
- Build warnings due to unused unsafe blocks since CXX 1.0.130
- On non-Unix platforms, use deep copying rather than symlinking
- cxx-qt-cmake: Fix build errors with rustup 1.28.0 by bumping Corrosion
0.7.0
Added
#[auto_cxx_name]and#[auto_rust_name]attributes forexternblocks, which will convert the case of names, automatically camelCase for cxx, and snake_case for rust- Support for further types:
QLine,QLineF,QImage,QPainter,QFont,QPen,QPolygon,QPolygonF,QRegion,QAnyStringView internal_pointer_mut()function onQModelIndexc_voidin CXX-Qt-lib for easy access tovoid *CxxQtThreadis now marked asSyncso that it can be used by reference- Add cxx-qt-lib-extras crate which contains:
QCommandLineOption,QCommandLineParser,QElapsedTimer,QApplication - Serde support for
QString(requires "serde" feature on cxx-qt-lib) - A new QuickControls module, which exposes
QQuickStyle. This module is enabled by default and is behind theqt_quickcontrolsfeature. - Add support for specifying read write and notify in qproperty macro, including support for custom user defined functions
- Add support for the constant, required, reset and final flags in the qproperty macro
- QObject subclasses can now inherit from other CXX-Qt generated QObject classes
BUILD_WASMCMake option to support WebAssembly builds and a book page for building for WASM- Add support for cxx_name and rust_name on qproperty attributes which applies to the QProperty generated as well as functions
Changed
VCPKGis now being removed entirely- Connection now return a
QMetaObjectConnectionGuardandQMetaObjectConnectionis a separate type - Internal
cxx-qtheaders have moved to the namespacecxxqt1and the foldercxx-qt cxx-qt-gennow does not generate code requiringcxx-qt-lib, this allows forcxx-qt-libto be optional- File name is used for CXX bridges rather than module name to match upstream
#[qobject]attribute is now optional on types inextern "RustQt"#[qobject]attribute is now required on types inextern "C++Qt"#[qenum]s now resolve their namespace independently from their associated QObject- Reworked cxx-qt-build and the integration with CMake
- Dependencies are now automatically detected and configured by cxx-qt-build
- Libraries can pass build information to cxx-qt-build in the form of a
cxx_qt_build::Interface - Add CMake wrappers around corrosion to simplify importing crates and qml modules that were built with cxx-qt-build
- CMake code has been extracted into a separate repository for faster downloads (kdab/cxx-qt-cmake)
- Folder structure of Rust bridges is now considered in the same way as CXX in
CxxQtBuilder cxx_file_stemhas been removed from#[cxx_qt::bridge]and the source file name is now used for generated headers similar to CXX- Base attribute now takes an ident not a string, e.g.
#[base = ParentClass]instead of#[base = "ParentClass"] - No Cxx-qt-lib features are on by default now, instead we have a 'full' feature for the previously enabled features, making them opt in
- Removed implicit auto camel conversion with no attributes, instead use cxx_name and rust_name like CXX (this may come back but be explicit opt-in)
Removed
qt_guiandqt_qmlfeatures fromcxx-qt-buildthey are only used incxx-qt-lib(-headers)nowcxx-qt-lib-headersandcxx-qt-lib-extras-headersare now merged into their respective base cratesBuildOptsare replaced by theInterfacetype which does not need to be reiterated by downstream dependencies- Locking has been removed from the generated QObjects. Qt/User C++ code is responsible for upholding Rusts Safety guarantees.
- The
cxx_qt::Lockingtrait is no longer available.
- The
0.6.1
Fixed
- Missing include for
MaybeLockGuardwhen using onlyextern "C++Qt"signals - Fix build issues with Qt 6.7
- Improve handling of Apple frameworks with Qt
- Run qmlcachegen only when required
- Support for building with no Rust or C++ files in the builder script
0.6.0
Added
- Allow associated constants, types and macro invocations within
impl qobject::Tblocks - Ensure that generated Rust code works when
#![deny(missing_docs)]is enabled - Ability to connect and disconnect from signals in Rust triggering a function pointer or closure
unsafe impl !cxx_qt::Locking for qobject::Tto disable internal lockingDerefis now implemented forqobject::Tto reach theTRust struct- Support for C++ only methods by not having a
#[qinvokable]attribute - Ability to define a custom C++ Constructor using
cxx_qt::Constructor cxx_qt::Initializetrait for easier default-constructor implementationextern "C++Qt"block support for declaring existing types with methods and signals#[qenum]attribute forQ_ENUMandQ_ENUM_NSsupportqnamespace!macro to support exposing namespaced enums to QML
Changed
- Pretty-print errors messages when build script fails
QDateTimeAPI to usecurrent_date_timerather thancurrent_date- Always call
qt_build_utils::setup_linker()inCxxQtBuilderand remove the proxy method - Moved to
syn2.0 internally and for any exportedsyntypes impl cxx_qt::Threading for qobject::Tnow needs to be specified forqt_thread()to be available#[cxx_qt::qsignals]and#[cxx_qt::inherit]are now used in anextern "RustQt"block as#[qsignal]and#[inherit]#[qinvokable]is now defined as a signature inextern "RustQt"rust_mutis now safe to call#[qproperty]is now defined as an attribute on the qobject rather than the field- QObject struct is now split between the bridge and implementation outside via a type alias
qobjectmodule is no longer generatedimpl cxx_qt::trait for qobject::Tinside the bridge is nowimpl cxx_qt::trait for Tqobject::Tas the self parameter in the bridge is nowT#[cxx_override],#[cxx_final],#[cxx_virtual]are now independant attributes rather than embedded in#[qinvokable]- Use
set_organization_nameinstead ofq{core,gui}application_set_organization_namein cxx-qt-lib
Fixed
- Do not use -bundle otherwise CMake builds are missing qt-static-initalizers (note this is broken in rustc 1.69)
- Do not import
Pinin hidden module as invokables are outside now, resolving IDE integration - Rust always links against a non-debug Windows runtime with *-msvc targets, so we need to link to MultiThreadedDLL
Removed
- Removed support for
cxx_typeandcxx_return_typeand related conversion methods. - Removed
newCppObjectfunction that allowed creation of default-constructed QObject from Rust. - Generation of getter and setter for private Rust fields
- Generation of mutable getter for properties, instead use
rust_mut
0.5.3
Fixed
- Ensure that QVariant{Hash,List,Map} cxx-qt-lib equivalents are registered so that they work in QML
- Stop generating
muton self pins unnecessarily
0.5.2
Fixed
- Builds failing due to
link modifiers combination +bundle,+whole-archive is unstable when generating rlibs
0.5.1
Fixed
qrcresources added toCxxQtBuilderorQtBuildnow triggercargo:rerun-if-changedfor file entries- Fix not being able to use
QVariantas a#[qproperty], because thePartialEqimplementation was missing
0.5.0
Added
- Support for inheriting methods from the superclass into Rust using
#[cxx_qt::inherit]. - Register QML types at build time:
#[cxxqt::qobject(qml_uri = "foo.bar", qml_version = "1.0")] - Register QRC resources at build time in Cargo builds (don't need to call initialization function from Rust
mainfunction) - Support for container types:
QSet<T>,QHash<K, V>,QList<T>,QMap<K, V>,QVector<T> - Support for further types:
QByteArray,QCoreApplication,QGuiApplication,QMargins,QMarginsF,QModelIndex,QPersistentModelIndex,QQmlApplicationEngine,QQmlEngine,QStringList,QTimeZone,QVector2D,QVector3D,QVector4D - Support for nesting objects in properties, invokables, and signals with
*mut T - Allow for marking signals as existing in the base class
- Support for conversions to types in third-party crates:
bytes,chrono,http,rgb,time,url - Add several quality of life functions to builtin cxx-qt-lib types, including
Defaultconstructors, string formatting,std::cmporder and operators
Changed
QVariantnow has a uses aQVariantValuetrait for supported types, allowing custom types to be used with QVariantQtGuiandQtQmltypes in cxx-qt-lib are now behind the featuresqt_guiandqt_qml
Fixed
- Support for generating correct C++ code for
Pin<T>Rust types - Support namespace attribute on shared types, QObject struct, and extern blocks
- Asserts for 32bit platforms such as Wasm
- Errors from the generation not pointing to the span where they occurred