当前位置:编程学习 > wap >>

几个简单的例子,将list导出到QML

--------------------编程问答-------------------- 好东西啊!!!!!!!!!!!!!!! --------------------编程问答-------------------- 为了防止网站资源丢失 我给粘过来好了 


1) Use QDeclarativeListProperty for properties
Unfortunately, QDeclarativeListProperty can only be used to expose properties.


// 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
        }
    }
}
--------------------编程问答-------------------- 2) Use QList<QObject *>
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.



// 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!MS研究的人不多! --------------------编程问答-------------------- 资料太少 --------------------编程问答-------------------- 可以说说希望有怎样的资料吗? --------------------编程问答-------------------- 我试过了在arm平板上运行QML,但是失败,有人成功吗? --------------------编程问答--------------------
引用 7 楼 ailinty 的回复:
我试过了在arm平板上运行QML,但是失败,有人成功吗?

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,