#include #include #include #include #include #include #include #include #include #include #include #include "my_application.hh" int main(int argc, char **argv) { MyApplication app(argc, argv, ignition::gui::WindowType::kMainWindow); // QML application engine with downstream customizations auto engine = QQmlApplicationEngine(/*&app*/); QObject::connect( &engine, &QQmlApplicationEngine::objectCreated, [](QObject *object, const QUrl &url) { if (object == nullptr) { qCritical() << "Failed to load QML."; exit(1); } }); engine.addImportPath("qrc:///"); for (const auto &path : QProcessEnvironment::systemEnvironment().value("LD_LIBRARY_PATH").split(":")) { engine.addPluginPath(path); } engine.load(QUrl("qrc:///example.qml")); // Dependency injection of the QML engine to be compatible with downstream applications app.SetEngine(&engine); auto quickWindow = qobject_cast(app.Engine()->rootObjects().value(0)); auto rootItem = qobject_cast(app.Engine()->rootObjects().first()); auto container = rootItem->findChild("ignContainer"); // Dependency injection of the plugin container app.SetPluginItemContainer(container); // Same config as used in rviz/application.cpp auto rviz_share_directory = ament_index_cpp::get_package_share_directory("ign_rviz"); app.LoadConfig(rviz_share_directory + "/config/rviz.config"); // Same plugins as rviz/application.cpp // auto plugin_directory = ament_index_cpp::get_package_prefix("ign_rviz_plugins"); // app.AddPluginPath(plugin_directory + "/lib"); auto code = QGuiApplication::exec(); auto plugin_names = app.PluginList(); for(auto const name_and_path: plugin_names) { auto name = name_and_path.first; app.RemovePlugin(name); qInfo() << "Removed plugin " << name.c_str(); } std::this_thread::sleep_for(std::chrono::milliseconds(300)); return code; }