qmlRegisterType 函数 又没人成功编译过的?

tt2com 2012-09-11 02:22:54
在官网上找了个demo 有关qmlRegisterType
无论如何都无法编译通过,我看了assistant 其是 QDeclarativeEngine下的一个函数,但一直报错。
我那些库没添加》?

#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"); //

//问题处,这丫的东西该怎么用啊。

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
...全文
517 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
额。。混口饭吃不容易啊。。
tt2com 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

呵呵。 这样的
这是moc的规则

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

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

所以。。规范啦。。。
[/Quote]
兄弟啊你研究的还真深入啊。
  • 打赏
  • 举报
回复
呵呵。 这样的
这是moc的规则

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

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

所以。。规范啦。。。
tt2com 2012-09-11
  • 打赏
  • 举报
回复
我在 MyObject中加入了

Q_PROPERTY(int num READ getnum CONSTANT);
QDeclarativeListProperty<MyObject> getInfo()
{
for (int i = 0; i < 10; ++i)
{
MyObject * k = new MyObject();
k->i = 111111111;
list << k;
}
return QDeclarativeListProperty<MyObject>(this, 0, &MyObject::appendObject, 0, 0, &MyObject::clearObject);
}
Q_INVOKABLE int getnum() const{
return i;
}
int i;

QML 文件

import QtQuick 1.0

Rectangle {
id: page
width: 500; height: 200
color: "red"

MyObject
{
id: myObject
}

ListView {
id: list_view1
anchors.fill: parent
model: myObject.getInfo
delegate: zoneDelegate


}
Component{
id: zoneDelegate
Text {
id: text1
text: num
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
anchors.fill: parent
font.pixelSize: 12
}
}
}

我测试过ListView无法建立。
但我在MyObject下用Component进行测试num是可以被调用的,但我不知道错在那边,哪位可以指导一下啊。
tt2com 2012-09-11
  • 打赏
  • 举报
回复
新问题,运行程序无List结果,qml中无法识别MyObject?
哪位做过测试的,上面的是官方的demo,我还少什么东西?
tt2com 2012-09-11
  • 打赏
  • 举报
回复
这TMD就是一个2B错误,将MyObject类单独写就不报错了。
我实在看搞明白,MyObject单独写,和main写在一起有什么区别
wopabe 2012-09-11
  • 打赏
  • 举报
回复
加QMetaObject了吗?
这是些连接的错误

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧