All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Allow associated constants, types and macro invocations within
impl qobject::T
blocks - 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
unsafe impl !cxx_qt::Locking for qobject::T
to disable internal lockingDeref
is now implemented forqobject::T
to reach theT
Rust 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::Initialize
trait for easier default-constructor implementationextern "C++Qt"
block support for declaring existing types with methods and signals
- Pretty-print errors messages when build script fails
QDateTime
API to usecurrent_date_time
rather thancurrent_date
- Always call
qt_build_utils::setup_linker()
inCxxQtBuilder
and remove the proxy method - Moved to
syn
2.0 internally and for any exportedsyn
types impl cxx_qt::Threading for qobject::T
now 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_mut
is 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
qobject
module is no longer generatedimpl cxx_qt::trait for qobject::T
inside the bridge is nowimpl cxx_qt::trait for T
qobject::T
as 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_name
instead ofq{core,gui}application_set_organization_name
in cxx-qt-lib
- Do not use -bundle otherwise CMake builds are missing qt-static-initalizers (note this is broken in rustc 1.69)
- Do not import
Pin
in hidden module as invokables are outside now, resolving IDE integration
- Removed support for
cxx_type
andcxx_return_type
and related conversion methods. - Removed
newCppObject
function 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 - 2023-05-19
- Ensure that QVariant{Hash,List,Map} cxx-qt-lib equivalents are registered so that they work in QML
- Stop generating
mut
on self pins unnecessarily
0.5.2 - 2023-04-27
- Builds failing due to
link modifiers combination +bundle,+whole-archive is unstable when generating rlibs
0.5.1 - 2023-03-27
qrc
resources added toCxxQtBuilder
orQtBuild
now triggercargo:rerun-if-changed
for file entries- Fix not being able to use
QVariant
as a#[qproperty]
, because thePartialEq
implementation was missing
0.5.0 - 2023-03-08
- 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
main
function) - 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
Default
constructors, string formatting,std::cmp
order and operators
QVariant
now has a uses aQVariantValue
trait for supported types, allowing custom types to be used with QVariantQtGui
andQtQml
types in cxx-qt-lib are now behind the featuresqt_gui
andqt_qml
- 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
0.4.1 - 2022-11-18
- Multiple QObjects can be defined in one bridge
- Fixed linking Qt with macOS frameworks. This allows using Qt from Homebrew.
0.4.0 - 2022-10-28
- Addition of qt-build-utils crate
- Add generic system for performing type conversions in C++
- Refactor of API so that CXX-Qt is a superset of CXX
- Rewrite of build system, removal of custom cmake file, corrosion is used for CMake and support for building with only Cargo
- Refactor of internal generation code so it's split into stages and removal of pattern matching for types, so arbritary CXX types can be supported
- Mark Qt relocatable types as trivial to CXX
- Use Rust closures to queue tasks onto the Qt thread
- Support for nested objects
0.3.0 - 2022-06-10
- Add a demo for showing complex threading and async
- Support for declaring and emitting signals
- Use CXX itself for bridging Qt types
0.2.1 - 2022-03-21
- Add vcpkg for Windows and macOS, then use this for CI
- Support mutable invokables
0.2.0 - 2022-02-28
- Add more Qt types, QDate, QDateTime, Qpoint, QRect, QRectF, QSize, QTime, QUrl
- Support Qt 6 for Qt types
- Use a "CppObj" to represent the C++ context
- Add a book for documentation
- Use postEvent for emitting events safely
0.1.0 - 2021-12-03
- Initial release
- Support for bridging properties and invokables
- Support for QColor, QPointF, QSizeF, QString, QVariant
- Support for nested objects