在创建QApplication之前使用Qt元类型系统是否可以?

时间:2015-02-11 11:59:51

标签: c++ qt static qapplication metaobject

每当我需要在Qt元对象系统中注册一个类型时,我都会使用以下代码:

*。h file

class MyClass
{

    //.....

    class MyType {.....};
    static const int metaType_MyType;

    class MetaClerk
    {
    public:
        MetaClerk(void);
    };
    static const MetaClerk metaClerk;

    //.....

};
Q_DECLARE_METATYPE(MyClass::MyType)
QDataStream &operator<<(QDataStream &stream, const MyClass::MyType &a);
QDataStream &operator>>(QDataStream &stream, MyClass::MyType &a);

* .cpp文件

//.....
const int MyClass::metaType_MyType = qRegisterMetaType<MyClass::MyType>("MyClass::MyType");
MyClass::MetaClerk::MetaClerk()
{
    qRegisterMetaTypeStreamOperators<MyClass::MyType>("MyClass::MyType");
}
const MyClass::MetaClerk MyClass::metaClerk;
//.....

这样我在main()函数开始之前就以所有可能的方式注册了MyType。所以,问题是

1)整个Qt MetaObject系统是否需要QCoreApplication的实例?也许我的代码巧妙地巧合了?

2)有没有好的解决方案不涉及我丑陋的拐杖(即职员班)?

1 个答案:

答案 0 :(得分:1)

QCoreApplication负责为Qt应用程序提供事件循环,处理应用程序的初始化和完成以及管理应用程序和系统设置。

创建QWidget之类的项目时,您肯定应该拥有QApplication的实例。但在创建QMetaTypeqRegisterMetaType的实例之前,使用QCoreApplication类或使用QApplication会毫无困难。