Czy istnieje sposób na znalezienie instancji QMetaObject klasy, biorąc pod uwagę nazwę klasy? to, co lubię robić, to ładować obiekty z dysku, ale aby tak się stało, potrzebuję sposobu na odzyskanie instancji QMetaObject przy użyciu nazwy klasy, aby użyć obiektu QMetaObject do utworzenia instancji.Jak znaleźć instancję metamocytu Qt na podstawie nazwy klasy?
Odpowiedz
można przechowywać instancje metaklasa będą potrzebne w Hash lub mapą, a następnie pobrać je przez co nazwa przechowywać je pod
Dla Państwa przypadku odpowiednim rozwiązaniem może być przy użyciu Qt mechanizm wtyczek. Oferuje funkcjonalność do łatwego ładowania udostępnionej/dynamicznej biblioteki i sprawdzenia, czy zawiera implementację jakiegoś pożądanego interfejsu, jeśli tak - utwórz instancję. Szczegóły można znaleźć tutaj: How to Create Qt Plugins
Powinieneś być w stanie to zrobić z QMetaType. Aby Twoje typy były znane, możesz potrzebować Q_DECLARE_META_TYPE()
i/lub qRegisterMetaType()
. Następnie powinno działać mniej więcej tak, jak w tym przykładzie, z linku:
int id = QMetaType::type("MyClass");
if (id == 0) {
void *myClassPtr = QMetaType::construct(id);
...
QMetaType::destroy(id, myClassPtr);
myClassPtr = 0;
}
Ostatnio miałem do czynienia z tym samym problemem. Potrzebowałem metaobiektu bez konieczności tworzenia instancji samej klasy. Najlepsze, co mogę zrobić, to stworzyć globalną/statyczną funkcję, która pobiera qmetaobject z podaniem nazwy klasy. Osiągnąłem to, używając QObject :: staticMetaObject.
QMetaObject GetMetaObjectByClassName(QString strClassName)
{
QMetaObject metaObj;
if (strClassName.compare("MyClass1") == 0)
{
metaObj = MyClass1::staticMetaObject;
}
else if (strClassName.compare("MyClass2") == 0)
{
metaObj = MyClass2::staticMetaObject;
}
else if (strClassName.compare("MyClass3") == 0)
{
metaObj = MyClass3::staticMetaObject;
}
else if (strClassName.compare("MyClass4") == 0)
{
metaObj = MyClass4::staticMetaObject;
}
else if (strClassName.compare("MyClass5") == 0)
{
metaObj = MyClass5::staticMetaObject;
}
// and so on, you get the idea ...
return metaObj;
}
Patrz: http://doc.qt.io/qt-5/qobject.html#staticMetaObject-var
Jeśli ktoś ma lepszą opcję, proszę podzielić się!
Można również spojrzeć na funkcję: QMetaType::metaObjectForType
który
powraca QMetaType :: meta obiekt na typ
Aktualizacja: To jest mój kod, to utworzyć klasę przez nazwę klasy . (Zauważ, że klasa musi być zarejestrowana qRegisterMetaType (lub jest QObject bazę)
int typeId = QMetaType::type("MyClassName");
const QMetaObject *metaObject = QMetaType::metaObjectForType(typeId);
QObject *o = metaObject->newInstance();
MyClassName *myObj = qobject_cast<MyClassName*>(o);
Aktualizacja 2:. ja zapomniałem powiedzieć konstruktor yout class musi być oznaczona jako Q_INVOKABLE
- 1. Pobierz instancję klasy według nazwy klasy string
- 2. Import na instancję klasy
- 3. Jak znaleźć instancję klasy w działającej maszynie JVM
- 4. Jak wygenerować kod na podstawie innej klasy?
- 5. Jak usunąć obrazy dokowane na podstawie nazwy?
- 6. Jak znaleźć wersję Qt?
- 7. Jak AutoMapper utworzyć instancję klasy
- 8. Jak wykrywać instancję anonimowej klasy?
- 9. MongoDB: jak znaleźć na podstawie identyfikatora poddokumentu?
- 10. Tworzenie instancji klasy na podstawie className: string
- 11. Jak mogę udekorować instancję klasy wywoływalnej?
- 12. Jak zabić instancję klasy w innej klasie?
- 13. Zakończenie Vima na podstawie nazwy bufora
- 14. Zmiana domyślnej składni na podstawie nazwy pliku
- 15. Serwer proxy Apache na podstawie nazwy hosta
- 16. elisp warunkowo na podstawie nazwy hosta
- 17. jak znaleźć klasy Java?
- 18. Jak "wywołać" instancję klasy w PHP?
- 19. Jak utworzyć instancję klasy z jej TRttiType?
- 20. Jak ustawić/utworzyć instancję klasy Generics?
- 21. Jak uzyskać wszystkie pola tekstowe w danym div na podstawie jego nazwy klasy?
- 22. Jak wyodrębnić element HTML na podstawie jego klasy?
- 23. Jak utworzyć nową instancję z nazwą klasy w GWT
- 24. Jak skopiować tabele na podstawie nazwy schematu w Microsoft.SqlServer.Management.Smo.Transfer
- 25. Jak skonfigurować warunkowanie zwrotne warunkowo na podstawie nazwy kontekstu?
- 26. Jak utworzyć listę tabel na podstawie nazwy kolumny w sybase?
- 27. Jak wstrzykiwać właściwą zależność na podstawie konstruktora nazwy parametru
- 28. Jak znaleźć katalog instalacyjny aplikacji Qt?
- 29. Wybierz element na podstawie klasy potomnej
- 30. django stosowania klasy stylu na podstawie warunkowego