Wpis z mikrobloga

#cpp #programowanie #qt

Orientuje się ktoś czemu pluginy do Qt (w sensie nie do QtCreatora a do aplikacji) koniecznie muszą być QObjectami? Nie mogę znaleźć wyjaśnienia czemu AKURAT każdy plugin MUSI koniecznie być QObjectem. Wyjaśnienie może być dowolne tak naprawdę "bo QPluginLoader używa qobjectcast i spodziewa się QObjectu, tyle", ale chciałbym wiedzieć czemu ja muszę to robić.
  • 3
@tell_me_more: Moja teoria jest taka, że QPluginLoader zwraca QObject* z instance(), bo tak jest zrobione (QObject pełni rolę "szablonu" pod którym można ukryć wskaźnik na faktyczny obiekt). Po odebraniu QObject* trzeba zrobić qobject_cast na to co my tam chcemy za interfejs wyciągnąć. No wygląda mi to po prostu na taką przyjętą konwencję ukrywania uniwersalnych wskaźników pod QObject*.
@Khaine: bycie QObjectem jest potrzebne, żeby MOCe działały (propertisy, sloty, sygnały, i inne bajery z tymi ich makrami). Pluginy używają tej mocowej magii do specyfikacji interfejsu itp:

QPLUGINMETADATA(IID "org.qt-project.Qt.Examples.PlugAndPaint.FilterInterface" FILE "extrafilters.json")
Q_INTERFACES(FilterInterface)

Źródło: http://doc.qt.io/qt-5/plugins-howto.html

Więc trzeba by samemu to wypisywać wszystko. Pewnie by się dało, ale po co?