C
ListModel 结构体
template <typename T> struct Qul::ListModel从此类派生以向 QML 暴露模型。 更多信息...
头文件 | #include <qul/model.h> |
自 | Qt Quick Ultralite 1.0 |
实例化 | ListModel |
继承 | Qul::Object |
公开函数
公开变量
Signal<void (int)> | dataChanged |
Signal<void ()> | modelReset |
静态公开成员
const int | StaticCount |
详细描述
使用 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 支持的简单类型(例如,int 或 Qul::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许可证下使用。
了解更多。