使用QML ListView和C ++ QList <QObject *>时如何具有过渡动画?

格斯特龙

我正在使用QtQuick 2.0和QML ListView,它们已用C ++(对象的QList)连接到我的模型。通过QQmlContext :: setContextProperty()建立连接。

现在文档告诉我接口没有直接的方式来了解更改,因此,仅在更改模型时才实现上下文。但是,当我这样做时,视图将直接实现而不触发任何事件(例如添加或删除事件),这使我有些恼火,因为我无法控制过渡。

简单地说,这是我的qml代码:

ListView {
id : list
        boundsBehavior: Flickable.StopAtBounds

        anchors {
            top: titleBar.bottom
            topMargin: -1
            bottom: mainWindow.bottom
            bottomMargin: -1
        }
        width: mainWindow.width

        model: episodes
        delegate: Episode {
            id: myDelegate
            onShowClicked: episodes.append(episodes[index])
        }

        ScrollBar {
            flickable: list;
        }
    }

其中Episode是我的自定义代表。它包含以下代码:

ListView.onAdd: SequentialAnimation {
    PropertyAction { target: episodeDelegate; property: "height"; value: 0 }
    NumberAnimation { target: episodeDelegate; property: "height"; to: 80; duration: 250; easing.type: Easing.InOutQuad }
}

ListView.onRemove: SequentialAnimation {
    PropertyAction { target: episodeDelegate; property: "ListView.delayRemove"; value: true }
    NumberAnimation { target: episodeDelegate; property: "height"; to: 0; duration: 250; easing.type: Easing.InOutQuad }

    // Make sure delayRemove is set back to false so that the item can be destroyed
    PropertyAction { target: episodeDelegate; property: "ListView.delayRemove"; value: false }
}

这是Qt示例的直接副本。

总而言之,模型已正确链接和同步,尽管这样做使我无法了解QML逻辑中模型更改的性质。

有人知道有什么把戏吗?

我穆尔扎

重置时setContextProperty,您可以使用populate过渡。但是,这会将转换同时应用于列表中的所有元素。

如果您希望每次添加一个项目都具有动画效果,则可以使用信号来实现。例如:

class SomeList : public QObject
{
    Q_OBJECT
public:
    explicit SomeList(QObject *parent = 0);

    void Add(QString color, QString value)
    {
        emit addNew(color,value);
    }

signals:
    void addNew(QString data1,QString data2);
};

在main.cpp中,您可以拥有:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    engine.rootContext()->setContextProperty("cppInstance",new SomeList);

    return app.exec();
}

在QML中:

ListModel{
    id:someListModel
}

Rectangle{
    width: 600
    height: 600
    ListView{
        model:someListModel
        delegate:Rectangle{
            width: parent.width
            height: parent.height/10
            color: model.color
            Text{
                text: value
            } 
        }
    }
    Connections{
        target: cppInstance
        onAddNew: { someListModel.insert(0,{"color":data1,"value":data2})}
    } 
}

SomeList该类中,您还可以有一个QListas成员,其中将包含您在QML中插入的字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用QList <QObject *>作为模型的QML ListView

来自分类Dev

将QList <QObject *>层次结构公开到QML

来自分类Dev

从QML访问QList时QT / QML c ++程序崩溃

来自分类Dev

如何使用 QDataStream 在文件中写入和读取 QList<Mat>?

来自分类Dev

Qt C ++如何使用QList <> :: const_iterator?

来自分类Dev

QList复制构造函数:如何使用变量新建QList <QStandardItem *>

来自分类Dev

无法从QML访问C ++ QObject子类方法

来自分类Dev

QObject :: connect:在C ++ Qt 5.3中连接qml信号时没有此类信号

来自分类Dev

从qml访问QList <T>

来自分类Dev

QObject从C ++到QML到QML到C ++(在列表中)

来自分类Dev

在QML中为C ++类型的QObject *属性分配null时断言失败

来自分类Dev

如何在 QML javascript 功能块内创建 C++ QObject?

来自分类Dev

在 Qml 代码和一些 Qml 警告中编辑 C++ QList<Object*> 模型的问题

来自分类Dev

如何使用修复索引创建QList

来自分类Dev

静态QList的QObject指针来跟踪兄弟姐妹吗?

来自分类Dev

QList复制构造函数:如何使用变量创建新的QList <QStandardItem *>

来自分类Dev

如何在QML文件中调用QObject的指针?

来自分类Dev

QObjectList和QList的区别

来自分类Dev

QList正确的使用方式

来自分类Dev

C ++-QList中的指针

来自分类Dev

如何创建QList对象?

来自分类Dev

如何在 QT 中使用 QSettings 保存自己类的 QList?

来自分类Dev

尝试使用QDatastream序列化自定义类的QList时出现错误C2679

来自分类Dev

'QObject :: QObject(const QObject&)'是私有的

来自分类Dev

使用Javascript数组访问QObject属性的QML绑定

来自分类Dev

如何检查QObject是否是QObject的后代?

来自分类Dev

使用QObject代替容器

来自分类Dev

如何公开带有指向QML的指针成员的非QObject类?

来自分类Dev

从QListWidgetItem和QObject派生时为什么会崩溃

Related 相关文章

  1. 1

    使用QList <QObject *>作为模型的QML ListView

  2. 2

    将QList <QObject *>层次结构公开到QML

  3. 3

    从QML访问QList时QT / QML c ++程序崩溃

  4. 4

    如何使用 QDataStream 在文件中写入和读取 QList<Mat>?

  5. 5

    Qt C ++如何使用QList <> :: const_iterator?

  6. 6

    QList复制构造函数:如何使用变量新建QList <QStandardItem *>

  7. 7

    无法从QML访问C ++ QObject子类方法

  8. 8

    QObject :: connect:在C ++ Qt 5.3中连接qml信号时没有此类信号

  9. 9

    从qml访问QList <T>

  10. 10

    QObject从C ++到QML到QML到C ++(在列表中)

  11. 11

    在QML中为C ++类型的QObject *属性分配null时断言失败

  12. 12

    如何在 QML javascript 功能块内创建 C++ QObject?

  13. 13

    在 Qml 代码和一些 Qml 警告中编辑 C++ QList<Object*> 模型的问题

  14. 14

    如何使用修复索引创建QList

  15. 15

    静态QList的QObject指针来跟踪兄弟姐妹吗?

  16. 16

    QList复制构造函数:如何使用变量创建新的QList <QStandardItem *>

  17. 17

    如何在QML文件中调用QObject的指针?

  18. 18

    QObjectList和QList的区别

  19. 19

    QList正确的使用方式

  20. 20

    C ++-QList中的指针

  21. 21

    如何创建QList对象?

  22. 22

    如何在 QT 中使用 QSettings 保存自己类的 QList?

  23. 23

    尝试使用QDatastream序列化自定义类的QList时出现错误C2679

  24. 24

    'QObject :: QObject(const QObject&)'是私有的

  25. 25

    使用Javascript数组访问QObject属性的QML绑定

  26. 26

    如何检查QObject是否是QObject的后代?

  27. 27

    使用QObject代替容器

  28. 28

    如何公开带有指向QML的指针成员的非QObject类?

  29. 29

    从QListWidgetItem和QObject派生时为什么会崩溃

热门标签

归档