Ich habe eine Qt-Anwendung, die benutzerdefinierte Plugins (geladen mit QPluginLoader
) erlaubt, und diese Plugins können einige Schnittstellen implementieren und mit dem Q_INTERFACES()
Makro deklarieren.Qt-Plugins: Gibt es eine Möglichkeit, alle Schnittstellen aufzulisten, die ein Plugin implementiert?
Wenn Sie Qt-Dokumentation unter unten stehenden Link aussehen, ich rede über den „low-level“ API: http://doc.qt.io/qt-5/plugins-howto.html
Nun, dies ist meine Frage: nachdem ich ein Plugin mit QPluginLoader
lade, ist Gibt es eine Möglichkeit, alle Schnittstellen zu benennen, die es implementiert? Gibt es eine Möglichkeit zu nennen, was das Plugin im Q_INTERFACES()
Makro von der Haupt-App, die das Plugin lädt, erklärt?
Die Anwendung funktioniert derzeit sowohl mit Qt4 als auch mit Qt5, aber eine Lösung, die nur mit Qt5 funktioniert, wäre ebenfalls akzeptabel.
Qt erstellt definitiv Metadaten für die Schnittstellen, aber ich finde keine Möglichkeit, sie zu durchlaufen. – dtech
@ddriver Die Metadaten werden sehr implizit erstellt: moc generiert Code, mit dem Sie das 'QObject' in eine Instanz der Schnittstelle umwandeln können, wenn Sie den Namen der Schnittstelle kennen. Die Daten werden nicht auf andere Weise gespeichert: Es gibt keine Liste von Schnittstellen irgendwo :( –
Nun, es muss die tatsächlichen Strings für die Namen speichern, da das Meta-System mit String-Literalen arbeitet und Laufzeit-Lookups, es ist nur ein ernsthafte Unterlassung in der Gestaltung des Metasystems, dass diese Daten nicht auf eine nützlichere Weise strukturiert sind.Ich mag auch nicht die Tatsache, dass es für alles erzeugt wird, es wäre besser, wenn Sie angeben könnten, welche Art von Metadaten Sie wollen für ein bestimmtes Objekt – dtech