Sınıf adı verilen bir sınıfın QMetaObject örneğini bulmanın bir yolu var mı? Yapmayı sevdiğim şey disketten nesne yüklemektir, ancak bunun olması için, bir örnek oluşturmak için QMetaObject'i kullanmak için bir QMetaObject örneğini bir sınıfın adını kullanarak almanın bir yoluna ihtiyacım var.Bir sınıf adından Qt metaobject örneğini nasıl bulabilirim?
cevap
Sen uygun bir çözüm Qt eklentisi mekanizmasını kullanarak edilebilir sizin durumunuzda için
altında saklanan ne olursa olsun adı aracılığıyla onları almak o zaman bir Hash veya Harita gerekecektir metaclass örneklerini saklayabilir ve edebilirsiniz. Paylaşılan/dinamik kitaplığı kolayca yüklemek ve istenen arabirimin uygulanıp uygulanmadığını kontrol etmek için işlevsellik sunar, eğer öyleyse örneği oluşturun. Ayrıntılar şu adreste bulunabilir: How to Create Qt Plugins
Bunu QMetaType ile yapabilmeniz gerekir. Türlerinizi bilinen hale getirmek için Q_DECLARE_META_TYPE()
ve/veya qRegisterMetaType()
'a ihtiyacınız olabilir. Daha sonra bu örnekte kabaca şu şekilde çalışılmalıdır:
Son zamanlarda aynı problemle karşı karşıyayım. Sınıfın kendisinin bir örneğini oluşturmaya gerek kalmadan meta-nesneye ihtiyacım vardı. Yapabileceğim en iyi şey, sınıf adı verilen qmetaobject öğesini geri alan global/statik bir işlev oluşturmaktır. QObject :: staticMetaObject kullanarak bunu başardım.
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;
}
Bkz: Biri daha iyi bir seçenek varsa http://doc.qt.io/qt-5/qobject.html#staticMetaObject-var
, lütfen paylaşın!
Ayrıca fonksiyonuna bir göz atabilirsiniz: QMetaType::metaObjectForType
türü için hangi
döner QMetaType :: metaObject
Güncelleme: Gördüğüm kod bu, bu sınıf adıyla bir sınıf oluşturmak . (2
int typeId = QMetaType::type("MyClassName");
const QMetaObject *metaObject = QMetaType::metaObjectForType(typeId);
QObject *o = metaObject->newInstance();
MyClassName *myObj = qobject_cast<MyClassName*>(o);
Güncelleme) sınıfı QObject tabanını qRegisterMetaType kayıtlı (veya olması gerektiğini unutmayın. Söyleyecek unutmuş yout sınıfının yapıcı işaretlenmesi gerekir
Q_INVOKABLE olarak- 1. Sınıf adından div ismini alın
- 2. Haxe - bir dize adından bir sınıfın örneğini oluşturmak
- 3. Bir sınıf örneğini DWScript
- 4. Mac'te görünen adından bir yazı tipinin tam yolunu nasıl bulabilirim?
- 5. nasıl onun TRttiType bir sınıf örneğini mı?
- 6. nasıl işlev Qt
- 7. İyi bir iPhone/GWT/AppEngine örneğini nerede bulabilirim?
- 8. Model Meta Verilerini sınıf adından alın
- 9. Adından nasıl bir seçici alırım?
- 10. Sınıf yolundaki tüm arabirim uygulamalarını nasıl bulabilirim?
- 11. QT: Bir nesnenin sınıf adını al
- 12. Bir QObject türetilmiş sınıfın sınıf adını, bu sınıfın bir örneğini oluşturmadan elde etmenin bir yolu var mı?
- 13. OOP python - sınıf örneğini listeden silme
- 14. Haskell, sınıf Matrix show örneğini yapmaya çalışıyor
- 15. Bir Yöntemi Geçersiz Kılmak için Sınıf Örneğini Gerektirir
- 16. bir sınıf var
- 17. python neden işlev içinde bir sınıf örneğini yeniden kullanıyor
- 18. Örnek adından AWS'deki örnek nasıl alınır?
- 19. Bir ObjectSet örneğini nasıl oluşturabilirim?
- 20. Bir infix işlevinin adından% nasıl silinir?
- 21. C# adından eklenen bir kontrole nasıl erişilir?
- 22. WPF - MainWindow örneğini nasıl alabilirim?
- 23. Yüce projede sınıf yolundaki tüm arabirim uygulamalarını nasıl bulabilirim?
- 24. Anonim bir örneğini NameValueCollection'a dönüştürme
- 25. Bir Ruby uygulamasında kullanılmayan yöntemleri nasıl bulabilirim?
- 26. Dosya adından kaldır yolu
- 27. refrence bir örneğini
- 28. Nasıl Qt
- 29. QML dosyalarında sözdizimi hatalarını nasıl bulabilirim?
- 30. QT yuvaları ve kalıtım: programım neden alt sınıf yerine ana bilgisayara bağlanmaya çalışıyor? Bir QT programında