Skip to content

0.7.0

Latest
Compare
Choose a tag to compare
@ahayzen-kdab ahayzen-kdab released this 30 Oct 17:39
· 6 commits to main since this release

Added

  • #[auto_cxx_name] and #[auto_rust_name] attributes for extern blocks, 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 on QModelIndex
  • c_void in CXX-Qt-lib for easy access to void *
  • CxxQtThread is now marked as Sync so 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 the qt_quickcontrols feature.
  • 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_WASM CMake 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

  • VCPKG is now being removed entirely
  • Connection now return a QMetaObjectConnectionGuard and QMetaObjectConnection is a separate type
  • Internal cxx-qt headers have moved to the namespace cxxqt1 and the folder cxx-qt
  • cxx-qt-gen now does not generate code requiring cxx-qt-lib, this allows for cxx-qt-lib to be optional
  • File name is used for CXX bridges rather than module name to match upstream
  • #[qobject] attribute is now optional on types in extern "RustQt"
  • #[qobject] attribute is now required on types in extern "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_stem has 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_gui and qt_qml features from cxx-qt-build they are only used in cxx-qt-lib(-headers) now
  • cxx-qt-lib-headers and cxx-qt-lib-extras-headers are now merged into their respective base crates
  • BuildOpts are replaced by the Interface type 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::Locking trait is no longer available.