几个简单的例子,将list导出到QML
--------------------编程问答-------------------- 好东西啊!!!!!!!!!!!!!!! --------------------编程问答-------------------- 为了防止网站资源丢失 我给粘过来好了1) Use QDeclarativeListProperty for properties
Unfortunately, QDeclarativeListProperty can only be used to expose properties.
--------------------编程问答-------------------- 2) Use QList<QObject *>
// myobject.h
class MyObject : public QObject
{
Q_OBJECT
// expose the list as a property
Q_PROPERTY(QDeclarativeListProperty<MyObject> list READ getList)
// some random property that is accessible for each entry in the list
Q_PROPERTY(int num READ num)
public:
explicit MyObject(int i, QObject *parent = 0);
int num() const;
QDeclarativeListProperty<MyObject> getList();
private:
// call-back functions for list operations
static void append(QDeclarativeListProperty<MyObject> *property, MyObject *value);
static MyObject *at(QDeclarativeListProperty<MyObject> *property, int index);
static void clear(QDeclarativeListProperty<MyObject> *property);
static int count(QDeclarativeListProperty<MyObject> *property);
int i;
QList<MyObject *> list;
};
// myobject.cpp
MyObject::MyObject(int i, QObject *parent)
: QObject(parent)
{
this->i = i;
}
QDeclarativeListProperty<MyObject> MyObject::getList()
{
for (int i = 0; i < 20; ++i)
list.append(new MyObject(i));
return QDeclarativeListProperty<MyObject>(this, 0, &MyObject::append, &MyObject::count, &MyObject::at, &MyObject::clear);
}
int MyObject::num() const
{
return i;
}
void MyObject::append(QDeclarativeListProperty<MyObject> *property, MyObject *value)
{
MyObject *object = qobject_cast<MyObject *>(property->object);
if (object)
object->list.append(value);
}
MyObject *MyObject::at(QDeclarativeListProperty<MyObject> *property, int index)
{
MyObject *object = qobject_cast<MyObject *>(property->object);
if (object)
return object->list.at(index);
else
return 0;
}
void MyObject::clear(QDeclarativeListProperty<MyObject> *property)
{
MyObject *object = qobject_cast<MyObject *>(property->object);
if (object) {
foreach (MyObject *obj, object->list)
delete obj;
object->list.clear();
}
}
int MyObject::count(QDeclarativeListProperty<MyObject> *property)
{
MyObject *object = qobject_cast<MyObject *>(property->object);
if (object)
return object->list.size();
else
return 0;
}
// sample.qml
Rectangle {
height: 854; width: 480
MyObject {
id: myObject
}
ListView {
anchors.fill: parent
model: myObject.list
delegate: Text {
height: 30; width: 480
text: num
}
}
}
Unfortunately, there’s no way a view could know the changes in the QList. Also, due to a bug in the garbage collector, you have to take care of the deletion yourself.
// myobject.h
class MyObject : public QObject
{
Q_OBJECT
Q_PROPERTY(int num READ num)
public:
explicit MyObject(int i, QObject *parent = 0);
~MyObject();
int num();
Q_INVOKABLE QList<QObject *> getList();
private:
int i;
};
// myobject.cpp
MyObject::MyObject(int i, QObject *parent)
: QObject(parent)
{
this->i = i;
}
MyObject::~MyObject()
{
}
QList<QObject *> MyObject::getList()
{
QList<QObject *> list;
for (int i = 0; i < 20; ++i) {
// unfortunately, you have to delete these object yourself
MyObject *obj = new MyObject(i);
list.append(obj);
}
return list;
}
int MyObject::num()
{
return i;
}
// sample.qml
Rectangle {
height: 854; width: 480
MyObject {
id: myObject
}
ListView {
anchors.fill: parent
model: myObject.list
delegate: Text {
height: 30; width: 480
// unfortunately, you have to do this
text: model.modelData.num
}
}
}
3) Use QVariantList
Similar to the QList<QObject *> approach.
--------------------编程问答-------------------- 还没怎么研究过QML!MS研究的人不多! --------------------编程问答-------------------- 资料太少 --------------------编程问答-------------------- 可以说说希望有怎样的资料吗? --------------------编程问答-------------------- 我试过了在arm平板上运行QML,但是失败,有人成功吗? --------------------编程问答--------------------
// myobject.h
class MyObject : public QObject
{
Q_OBJECT
Q_PROPERTY(int num READ num)
public:
explicit MyObject(int i, QObject *parent = 0);
~MyObject();
Q_INVOKABLE QVariantList getList();
int num();
private:
int i;
};
// myobject.cpp
MyObject::MyObject(int i, QObject *parent)
: QObject(parent)
{
this->i = i;
}
MyObject::~MyObject()
{
}
QVariantList MyObject::getList()
{
QVariantList list;
for (int i = 0; i < 20; ++i) {
// unfortunately, you have to delete these object yourself
MyObject *obj = new MyObject(i);
list.append(QVariant::fromValue((QObject*)obj));
}
return list;
}
int MyObject::num()
{
return i;
}
// you can use the same QML sample as in approach 2)
qml完全可以运行在arm上
你能说下细节吗 --------------------编程问答-------------------- 好东西先试试 --------------------编程问答-------------------- 好东西先试试 --------------------编程问答-------------------- 学习了! --------------------编程问答-------------------- 做个标记以后用 --------------------编程问答-------------------- 好东西啊,太感谢了。。。 --------------------编程问答-------------------- 顶顶顶 --------------------编程问答-------------------- 资料太少 --------------------编程问答-------------------- 资料太少 --------------------编程问答-------------------- --------------------编程问答-------------------- 资料太少 --------------------编程问答-------------------- 恩,资料太少了。。。谢谢提供。。 --------------------编程问答-------------------- 谢谢提供,很有用 --------------------编程问答-------------------- 总会有些东西让我大吃一惊,自己太菜,呵呵, 学习... --------------------编程问答-------------------- 好东西要支持 --------------------编程问答-------------------- 占楼支持 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 学习了。。。 --------------------编程问答-------------------- 路过,学习一下 --------------------编程问答-------------------- 不错,学习了。。。。 --------------------编程问答-------------------- 学习了。。。 --------------------编程问答-------------------- 好贴,顶一下 --------------------编程问答-------------------- 好非常好 --------------------编程问答-------------------- 学习学习学习 --------------------编程问答-------------------- 不错,例子虽小,但是能够说明问题 --------------------编程问答-------------------- 試しませんでした --------------------编程问答-------------------- 高手啊!!! --------------------编程问答-------------------- 好!非常好! --------------------编程问答-------------------- how to register a C++ class MyObject as a QML type
use qmlRegisterType ( const char * uri, int versionMajor, int versionMinor, const char * qmlName )? --------------------编程问答-------------------- 资料太少,有些可以用来学习的简单例子就好了,呵呵 --------------------编程问答-------------------- --------------------编程问答-------------------- 那我就收藏了 --------------------编程问答-------------------- 收藏了 --------------------编程问答-------------------- 相当好的东西~~ --------------------编程问答-------------------- 谢谢楼主分享 --------------------编程问答-------------------- 哪位将第一个demo成功编译的,能否补全main函数中如何注册的啊,
我的
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QDeclarativeView view;
//MyObject * myobject = new MyObject();
qmlRegisterType<MyObject>("QtQuick", 1,0, "MyObject");
//view.rootContext()->setContextProperty("MyObject",myobject);
view.setSource(QUrl::fromLocalFile("test.qml"));
view.show();
return app.exec();
}
这样无法编译通过啊。哪位可以教教啊 --------------------编程问答-------------------- 错误是什么? --------------------编程问答-------------------- qmlRegisterType<MyObject>("QtQuick", 1,0, "MyObject");
带参数无法注册
补充:移动开发 , Qt