C

ListModel 结构体

template <typename T> struct Qul::ListModel

从此类派生以向 QML 暴露模型。 更多信息...

头文件 #include <qul/model.h>
Qt Quick Ultralite 1.0
实例化 ListModel
继承 Qul::Object

公开函数

virtual intcount() const = 0
virtual Tdata(int index) const = 0
Tget(int index) const

公开变量

Signal<void (int)>dataChanged
Signal<void ()>modelReset

静态公开成员

const intStaticCount

详细描述

使用 C++ 模型有助于将现有的 C++ 数据模型或其他复杂数据集暴露给 QML。在 C++ 中创建模型是唯一可以拥有非只读模型的方法:在 QML 中定义的模型在运行时无法修改。

要创建自己的模型,首先声明一个描述数据模型的 struct。它的公共字段成为模型角色。该结构必须是相等的。

struct AlarmData
{
    AlarmData()
        : seconds(0)
        , running(false)
    {}

    AlarmData(int argSeconds, bool argRunning)
        : seconds(argSeconds)
        , running(argRunning)
    {}

    int seconds;
    bool running;
};

inline bool operator==(const AlarmData &lhs, const AlarmData &rhs)
{
    return lhs.seconds == rhs.seconds && lhs.running == rhs.running;
}

或者,模板参数可以是 Qt Quick Ultralite 支持的简单类型(例如,intQul::qreal)。

然后,声明一个直接从 Qul::ListModel 继承的 struct。

struct AlarmModel : Qul::ListModel<AlarmData>
{
private:
    std::vector<AlarmData, Qul::PlatformInterface::Allocator<AlarmData> > m_data;

public:
    // Implement the ListModel interface
    int count() const QUL_DECL_OVERRIDE { return m_data.size(); }
    AlarmData data(int index) const QUL_DECL_OVERRIDE { return m_data[index]; }

注意:Qul::ListModel 必须是您的模型类型的直接和第一个基类,以便 QML 接口能够工作。

该结构可以包含 QML 应用程序可以用来与模型交互的附加函数

void togglePause(int index)
{
    m_data[index].running = !m_data[index].running;
    dataChanged(index);
}

modelReset 和 dataChanged 信号用于触发视图的刷新。

每当模型元素数量在视图实例化后发生变化时,都必须发出 modelReset 信号。

每当模型中的现有元素被修改时,都必须发出 dataChanged 信号。

动态字符串

从C++传递字符串到QML会对fontcompiler如何生成图形字符产生影响。可能存在一些字符在QML中将默认不进行渲染。有关更详细的描述,请参阅在QML中渲染动态字符串

另请参阅 Qt Quick Ultralite中的模型和视图C++数据模型文本渲染和字体

成员函数文档

[纯虚函数] int ListModel::count() const

返回模型中的数据条目数。

另请参阅 StaticCount

[纯虚函数] T ListModel::data(int 索引) const

返回指定索引中存储的数据。

T ListModel::get(int 索引) const

返回索引处的项目。存在以与QML接口兼容。

另请参阅 data

成员变量文档

const int ListModel::StaticCount

表示模型中确切元素数量的静态成员变量,必须覆盖以便重复使用模型。

注意: 此变量必须通过在派生类中定义一个static const int StaticCount来重写。

另请参阅 count

信号<void (int)> ListModel::dataChanged

发出此信号以告知视图重新加载给定索引处的项目数据。

另请参阅 modelReset

信号<void ()> ListModel::modelReset

发出此信号以告知视图模型需要重新加载。必须在更改行数时发出此信号

另请参阅 dataChanged

需在特定的Qt许可证下使用。
了解更多。