如何仅从类名获取QMetaObject
How I can get QMetaObject from just class name?
我需要获取QMetaObject来动态创建对象实例。如果我关闭对象,那么QObject::metaObject()就是我需要的。如果我知道这个类,那么我可以使用QObject::staticMetaObject变量。但是,如果我只知道类名作为字符串值,我应该使用什么呢?
您要求QMetaObject
,但说它是用于创建目的。如果这就是你所要做的,那么QMetaType很可能就是你所需要的。你必须用它注册你的类型,但我敢肯定QT没有一个默认情况下浮动的QMetaObject
的主列表,所以无论你做什么,这样的注册都是必要的。
QMetaType::Type id = QMetaType::type("ClassName");
if(id == 0)
throw something_or_whatever;
ClassName* p = (ClassName*)QMetaType::construct(id);
//act on p
QMetaType::destroy(id, p);
粗略地看一下文档,就不清楚p
的内存是如何分配的,但我认为destroy
会处理好这一点?使用风险自负。
从Qt5开始,仅从类名获取QMetaObject变得很简单:
int typeId = QMetaType::type("MyClassName");
const QMetaObject *metaObject = QMetaType::metaObjectForType(typeId);
if (metaObject) {
// ...
}
另请参阅以下Qt5 API文档:
- QMetaObject::type(const char*)
- QMetaObject::metaObjectForType(int)
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- QMetaObject invokeMethod的基于函数指针的语法
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 基于className的字符串为QObject的子类获取QMetaObject
- 如何从 QMetaObject::invokeMethod 获取返回值
- 如何仅从类名获取QMetaObject