For me, under Android target, it does fail for the linking. I was trying to add 
and interface for injecting property into object expose to Qml. I often want to 
add a subset of property to a model and I would have want to have to rewrite 
the same Q_PROPERTY() and changed signal over and over again.

But I guess I will stick with the ugly macro mess for now.

Would be nice to have a way to extend a QObject with defined class of property 
with get/set and changed signals that is not a QObject to avoid diamond 
inheritance since it could already inherit another QObject class.

For example I would have love to have interface for the dirty property so I 
could inject the property on many qobjects types I have without rewriting it 
every time. I can make the get/set/ protected value, but I still have to create 
the signals/slots/Q_PROPERTY every time. I use some macro but I find that ugly 
and error prone to forget one.


From: Konstantin Shegunov <[email protected]>
Sent: November 30, 2018 4:29 PM
To: Jérôme Godbout <[email protected]>
Cc: Interests Qt <[email protected]>
Subject: Re: [Interest] Interface with signals and slots

Hi,
This compiles for me:

class SignalInterface

{

public:

    virtual void mysignal() = 0;

};



class SignalImplementer : public QObject, public SignalInterface

{

    Q_OBJECT



signals:

    void mysignal() override;

};

However putting signals into an interface I think is rather dubious, because 
you won't be able to connect through the interface. I.e. this:

SignalImplementer obj;

QObject::connect(this, &Session::opened, &obj, &SignalInterface::mysignal);


Is going to fail the static assertions in QObject::connect.
You could derive from QObject though and have them in an abstract class.
_______________________________________________
Interest mailing list
[email protected]
https://lists.qt-project.org/listinfo/interest

Reply via email to