当前位置: 代码迷 >> QT开发 >> qmlRegisterType 函数 又没人顺利编译过的
  详细解决方案

qmlRegisterType 函数 又没人顺利编译过的

热度:706   发布时间:2016-04-25 04:31:13.0
qmlRegisterType 函数 又没人成功编译过的?
在官网上找了个demo 有关qmlRegisterType
无论如何都无法编译通过,我看了assistant 其是 QDeclarativeEngine下的一个函数,但一直报错。
我那些库没添加》?
C/C++ code
#include <QtDeclarative/QDeclarativeView>#include <QtDeclarative/QDeclarativeListProperty>#include <QMetaObject>#include <QtDeclarative/QtDeclarative>#include <QtGui> #include <QObject> #include <QtDeclarative/QDeclarativeEngine>class MyObject : public QObject {     Q_OBJECT         Q_PROPERTY(QDeclarativeListProperty<MyObject> getInfo READ getInfo CONSTANT)public:     MyObject()     {}     ~MyObject()     {}     QDeclarativeListProperty<MyObject> getInfo()     {         for (int i = 0; i < 10; ++i)         {             list << new MyObject();         }        return QDeclarativeListProperty<MyObject>(this, 0, &MyObject::appendObject, 0, 0, &MyObject::clearObject);     }    static void appendObject(QDeclarativeListProperty<MyObject> *l, MyObject *obj)    {           MyObject *object = qobject_cast<MyObject *>(l->object);        if (object)            object->list << obj;    }    static void clearObject(QDeclarativeListProperty<MyObject> *l)    {        MyObject *object = qobject_cast<MyObject *>(l->object);        if (object) {            foreach (MyObject *o, object->list)                delete o;            object->list.clear();        }    }    QList<MyObject *> list;    }; //#include "main.moc" int main(int argc, char** argv) {     QApplication app(argc, argv);     QDeclarativeView view;     qmlRegisterType<MyObject>("QtQuick", 1, 0, "MyObject"); //        [color=#FF0000]        //问题处,这丫的东西该怎么用啊。        [/color]    view.setSource(QUrl::fromLocalFile("test.qml"));     view.show();     return app.exec(); } 



>main.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const MyObject::staticMetaObject" (?staticMetaObject@MyObject@@2UQMetaObject@@B)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall MyObject::metaObject(void)const " (?metaObject@MyObject@@UBEPBUQMetaObject@@XZ)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall MyObject::qt_metacast(char const *)" (?qt_metacast@MyObject@@UAEPAXPBD@Z)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall MyObject::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MyObject@@UAEHW4Call@QMetaObject@@HPAPAX@Z)

需要导入那个静态库啊?
我已经导入的静态库有QtCore4.lib QtDeclarative4.lib QtGui4.lib

------解决方案--------------------
加QMetaObject了吗?
这是些连接的错误
------解决方案--------------------
呵呵。 这样的
这是moc的规则

moc只检查在.h 文件里包含了Q_OBJECT 然后生成moc_xxxx.cpp..

你现在把类写到到main.cpp中。moc生成的是main.moc..
所以你需要在main.cpp中 #include "main.moc"

所以。。规范啦。。。