在官网上找了个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"
所以。。规范啦。。。