@@ -12,6 +12,8 @@ mod ffi {
1212 type QStringList = crate :: QStringList ;
1313 include ! ( "cxx-qt-lib/qurl.h" ) ;
1414 type QUrl = crate :: QUrl ;
15+ include ! ( "cxx-qt-lib/qanystringview.h" ) ;
16+ type QAnyStringView < ' a > = crate :: QAnyStringView < ' a > ;
1517
1618 include ! ( "cxx-qt-lib/qqmlapplicationengine.h" ) ;
1719 type QQmlApplicationEngine ;
@@ -68,6 +70,9 @@ mod ffi {
6870
6971 #[ namespace = "rust::cxxqtlib1" ]
7072 unsafe extern "C++" {
73+ include ! ( "cxx-qt-lib/common.h" ) ;
74+ type c_void = crate :: c_void ;
75+
7176 #[ doc( hidden) ]
7277 #[ rust_name = "qqmlapplicationengine_new" ]
7378 fn qqmlapplicationengineNew ( ) -> UniquePtr < QQmlApplicationEngine > ;
@@ -77,6 +82,10 @@ mod ffi {
7782 fn qqmlapplicationengineAsQQmlEngine (
7883 ptr : Pin < & mut QQmlApplicationEngine > ,
7984 ) -> Pin < & mut QQmlEngine > ;
85+
86+ #[ doc( hidden) ]
87+ #[ rust_name = "qqmlapplicationengine_singleton_instance" ]
88+ fn qqmlapplicationengineSingletonInstance ( ptr : Pin < & mut QQmlApplicationEngine > , uri : QAnyStringView , typeName : QAnyStringView ) -> * mut c_void ;
8089 }
8190
8291 // QQmlApplicationEngine is not a trivial to CXX and is not relocatable in Qt
@@ -86,7 +95,7 @@ mod ffi {
8695 impl UniquePtr < QQmlApplicationEngine > { }
8796}
8897
89- use crate :: QQmlEngine ;
98+ use crate :: { c_void , QAnyStringView , QQmlEngine } ;
9099use core:: pin:: Pin ;
91100
92101pub use ffi:: QQmlApplicationEngine ;
@@ -101,4 +110,14 @@ impl QQmlApplicationEngine {
101110 pub fn new ( ) -> cxx:: UniquePtr < Self > {
102111 ffi:: qqmlapplicationengine_new ( )
103112 }
113+
114+ pub fn singleton_instance < T > ( self : Pin < & mut Self > , uri : QAnyStringView , type_name : QAnyStringView ) -> Option < & mut T > {
115+ unsafe {
116+ let ptr = ffi:: qqmlapplicationengine_singleton_instance ( self , uri, type_name) ;
117+ if ptr. is_null ( ) {
118+ return None ;
119+ }
120+ Some ( & mut * ( ptr as * mut T ) )
121+ }
122+ }
104123}
0 commit comments