rag*_*bit 6 c++ qt typeinfo qtcore
我想知道Qt是否提供了typeid的替代方法来识别变量类型并以人类可读的格式获取它们的名称.我的具体问题如下:
struct gArgument{
QString type;
void* arg;
};
void gargConverter(gArgument* oArg, T data){
oArg->type = typeid(data).name();
oArg->arg = static_cast<void*> (&data);
}
Run Code Online (Sandbox Code Playgroud)
我们的想法是概括一个变量以用作函数的输入.作为一个侧节点tyeinfo似乎在我的系统上没有正常工作(我在Windows 7上使用MinGW),如果我尝试:
int i; std::cout << typeid(i).name() << std::endl;
QString s; std::cout << typeid(s).name() << std::endl;
double d; std::cout << typeid(d).name() << std::endl;
float f; std::cout << typeid(f).name() << std::endl;
Run Code Online (Sandbox Code Playgroud)
我明白了
i
7QString
d
f
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
你可以用这个:
const char * QVariant::typeName () const返回存储在变体中的类型的名称。返回的字符串描述用于存储数据的 C++ 数据类型:例如,“QFont”、“QString”或“QVariantList”。无效变体返回 0。
这将适用于 POD 和注册的内置 Qt 类型。不过,您需要使用以下方法来注册您的自定义类型。
int qRegisterMetaType(const char * typeName)
您可以尝试的另一件事是,尽管QVariant以以下方式使用 Object 的 QMetaObject有点多余:
const char * QMetaObject::className() const返回类名。
和
const QMetaObject * QObject::metaObject() const [virtual]返回指向此对象的元对象的指针。
元对象包含关于继承 QObject 的类的信息,例如类名、超类名、属性、信号和槽。每个包含 Q_OBJECT 宏的 QObject 子类都有一个元对象。
信号/槽连接机制和属性系统需要元对象信息。inherits() 函数也使用元对象。
如果您没有指向实际对象实例的指针,但仍想访问类的元对象,则可以使用 staticMetaObject。
不用说,这仅适用于 QObjects,因此不适用于 QString 等。您需要创建 QObject 子类。
也有一些QMetaType,你可以使用创造,但是这是一个有点不同,所以我只是提的是完整的:
int QMetaType::type(const char * typeName) [static]返回一个名为 typeName 的类型的句柄,如果没有这样的类型,则返回 QMetaType::UnknownType。
在这里您可以找到所有类型:
http://qt-project.org/doc/qt-5.1/qtcore/qmetatype.html#Type-enum