c++ - 我如何从类名中获取 QMetaObject?

标签 c++ qt

我需要获取 QMetaObject 以动态创建对象实例。 如果我知道这个对象,那么 QObject::metaObject() 就是我所需要的。如果我知道类,那么我可以使用 QObject::staticMetaObject 变量。但是,如果我只知道类名作为字符串值,我应该使用什么?

最佳答案

你要求一个QMetaObject,但说它是为了创建目的。如果这就是您要做的全部,QMetaType可能正是您所需要的。你必须用它注册你的类型,但我很确定 QT 没有 QMetaObject 的主列表,默认情况下只是 float ,所以无论你做什么,这样的注册都是必要的.

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 会处理这个问题?使用风险自负。

关于c++ - 我如何从类名中获取 QMetaObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259390/

相关文章:

c++ - 使用两个标准对结构数组进行排序 C++

c++ - 使用 Godbolt 进入标准库调用

python - Qt中两个MainWindow()之间的通信

c++ - 将 QListView 缩减为列表中的公共(public)元素?

python - pyqt:向 QFileSystemModel 添加自定义列

c++ - 将问题与 libharu 联系起来

c++ - 在 Ubuntu 14.04 上编译 EOS 时缺少 C++ std 库方法和其他错误?

c++ - if 条件中的逗号运算符

c++ - 通用 2D 点作为 C++ 中的输入

c++ - QSerialPort 的 readAll() 不包括最后发送的响应