我的公司正在考虑从Qt4.8.4跳转到Qt5.4,但我遇到了一个对我们来说可能是个阻碍的变化:QMetaType::unregisterType()被删除了(http://doc.qt.io/qt-5/sourcebreaks.html).我们的GUI需要在运行时加载插件,同一个插件可能会在GUIsession期间加载和卸载不止一次。在Qt4中,我们遇到了一个问题,当第二次加载插件时,任何使用插件注册的自定义类型之一的信号/插槽都会导致访问冲突,因为元类型已被注册插件的第一个实例(现在已卸载,因此内存空间无效)。我们通过定义自己的宏来解决这个问题,以便在加载和卸载插件时安全地注册和取消
我需要获取QMetaObject以动态创建对象实例。如果我知道这个对象,那么QObject::metaObject()就是我所需要的。如果我知道类,那么我可以使用QObject::staticMetaObject变量。但是,如果我只知道类名作为字符串值,我应该使用什么? 最佳答案 你要求一个QMetaObject,但说它是为了创建目的。如果这就是您要做的全部,QMetaType可能正是您所需要的。你必须用它注册你的类型,但我很确定QT没有QMetaObject的主列表,默认情况下只是float,所以无论你做什么,这样的注册都是必要的
我有两个这样的类:classFoo{public:Foo(inti):_i(i){}int_i;};Q_DECLARE_METATYPE(Foo*)classBar:publicFoo{public:Bar(inti,intj):Foo(i),_j(j){}int_j;};Q_DECLARE_METATYPE(Bar*)我的长凳是这样的:intmain(intargc,char*argv[]){QApplicationa(argc,argv);Bar*bar=newBar(10,11);QVariantvar=QVariant::fromValue(bar);Foo*foo=var.v
我有一个运行良好的应用程序,但它不是在打开警告的情况下编译的。我正在尝试将其重新打开并整理它们,但没有关于如何解决此问题的想法。我有:QVariantsomeVarQVariant::TypevariantType=someVar.type();switch(variantType){caseQMetaType::QString:doSomething1();break;caseQMetaType::Float:doSomething2();break;}并收到此警告/错误:error:casevalue‘135’notinenumeratedtype‘QVariant::Type’[