I understand, but if you need your class to inherit something higher then QObject directly (QFile, QDataStream, ...) you get screw. I also get screw if a class inherite multiple interface. I did pure virtual function that simply emit the signals, but it's ugly, I did not find any better way so far.
[36E56279] une compagnie [cid:image002.jpg@01D4C76B.ECA213E0] RAPPROCHEZ LA DISTANCE Jérôme Godbout Développeur Logiciel Sénior / Senior Software Developer p: +1 (418) 800-1073 ext.:109 amotus.ca<http://www.amotus-solutions.com/> statum-iot.com<http://statum-iot.com/> [cid:image003.png@01D4C76B.ECA213E0]<https://www.facebook.com/LesSolutionsAmotus/> [cid:image004.png@01D4C76B.ECA213E0] <https://www.linkedin.com/company/amotus-solutions/> [cid:image005.png@01D4C76B.ECA213E0] <https://twitter.com/AmotusSolutions> [cid:image006.jpg@01D4C76B.ECA213E0] <https://www.youtube.com/channel/UCoYpQgsmj1iJZyDjTQ3x8Ig> From: Kristoffersen, Even (NO14) <even.kristoffer...@honeywell.com> Sent: February 18, 2019 8:50 AM To: interest@qt-project.org Cc: Jérôme Godbout <godbo...@amotus.ca> Subject: RE: [External] [Interest] Interface with signals and slots Really late response, but why inherit QObject in MyClass rather than IMyInterface? Since all the objects inheriting from IMyInterface needs to be QObjects you can just do this: class IMyInterface : public QObject { Q_OBJECT etc... } class MyClass : public IMyInterface { Q_OBJECT and so on... } -Even From: Interest [mailto:interest-boun...@lists.qt-project.org] On Behalf Of Jérôme Godbout Sent: 30. november 2018 21:38 To: interest@qt-project.org<mailto:interest@qt-project.org> Subject: [External] [Interest] Interface with signals and slots Hi, I was wondering if it's even possible to do the following somehow. I'm trying to make an Interface with signals without inheriting the QObject and I have a hard time make this compile properly: class IMyInterface { public: explicit IMyInterface(); virtual ~IMyInterface(); bool val() const; void setVal(const bool v); signals: virtual void valChanged() = 0; protected: bool m_val; }; Q_DECLARE_INTERFACE(IMyInterface, "IMyInterface") class MyClass : public QObject, public IMyInterface { Q_OBJECT Q_PROPERTY(bool val READ val WRITE setVal NOTIFY valChanged) Q_INTERFACES(IMyInterface) public: ... signals: virtual void valChanged() override; }; Q_DECLARE_METATYPE(MyClass*) The example is simplified to show my problem, the different class will inherit different QObject type so I cannot inherit 2 different QObject type. It does compile but this fail at link with the moc: moc_MyClass.obj:moc_MyClass.cpp:vtable for MyClass: error: undefined reference to 'MyClass::dirtyChanged()' moc_MyClass.obj:moc_MyClass.cpp:vtable for MyClass: error: undefined reference to 'non-virtual thunk to MyClass::valChanged()' module_demo.obj:module_demo.cpp:vtable for QQmlPrivate::QQmlElement<MyClass>: error: undefined reference to 'MyClass::valChanged()' module_demo.obj:module_demo.cpp:vtable for QQmlPrivate::QQmlElement<MyClass>: error: undefined reference to 'non-virtual thunk to MyClass::valChanged()' Is there a way to use the signals/slots into an interface to be declared? That would greatly help me do reusable code part. [36E56279] une compagnie [cid:image014.jpg@01D4C76B.EC8F7640] RAPPROCHEZ LA DISTANCE Jérôme Godbout Développeur Logiciel Sénior / Senior Software Developer p: +1 (418) 800-1073 ext.:109 amotus.ca<http://www.amotus-solutions.com/> statum-iot.com<http://statum-iot.com/> [cid:image015.png@01D4C76B.EC8F7640]<https://www.facebook.com/LesSolutionsAmotus/> [cid:image016.png@01D4C76B.EC8F7640] <https://www.linkedin.com/company/amotus-solutions/> [cid:image017.png@01D4C76B.EC8F7640] <https://twitter.com/AmotusSolutions> [cid:image018.jpg@01D4C76B.EC8F7640] <https://www.youtube.com/channel/UCoYpQgsmj1iJZyDjTQ3x8Ig>
_______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest