Thursday, May 28, 2020

Synthesize Qt properties

The are some utils that I use in most of my Qt projects. I'm a bit fed up of copy-pasting those every time I need something, so I created a project containing tools that are of frequent use when I write Qt apps, regardless of the type of app.

The only interesting tool I added yet is the synthesizer of Q_PROPERTY's. You can use the macros:
to synth├ętise props, with getter, setter and notifications. Each macro is overloaded: with 3 params, you do not have initialisation, adding a 4th param, also initialises the variable to the provided value. Also, I frequently need QObject that are just containers of properties, to be used in QML. I added these two macros to spare some lines:
A class like:
class Fraction : public QObject
    Q_PROPERTY(double numerator READ numerator WRITE setNumerator NOTIFY numeratorChanged)
    Q_PROPERTY(double denominator READ denominator WRITE setDenominator NOTIFY denominatorChanged)
    Fraction(QObject* parent = nullptr) : QObject(parent) {}
    double numerator() const {
        return m_numerator;
    double denominator() const {
        return m_denominator;
public slots:
    void setNumerator(double numerator) {
        if (m_numerator == numerator)
        m_numerator = numerator;
        emit numeratorChanged(numerator);
    void setDenominator(double denominator) {
        if (m_denominator == denominator)
        m_denominator = denominator;
        emit denominatorChanged(denominator);
    void numeratorChanged(double numerator);
    void denominatorChanged(double denominator);
    double m_numerator;
    double m_denominator;
can be simplified to:
L_RW_PROP(double, numerator, setNumerator)
L_RW_PROP(double, denominator, setDenominator)
I'm sure there are other similar approaches out there, but if you need it, you can simply add this repo as a submodule like I do:
Bye! ;-)

No comments:

Post a Comment