C
ListModel Struct
template <typename T> struct Qul::ListModelInherit from this class to expose a model to QML. More...
Header: | #include <qul/model.h> |
Since: | Qt Quick Ultralite 1.0 |
Instantiated By: | ListModel |
Inherits: | Qul::Object |
Public Functions
Public Variables
Signal<void (int)> | dataChanged |
Signal<void ()> | modelReset |
Static Public Members
const int | StaticCount |
Detailed Description
Using C++ models is useful for exposing existing C++ data models or other complex datasets to QML. Creating a model in C++ is the only way to have a non-readonly model: The ones defined in QML cannot be modified at runtime.
To create your own model, first declare a struct that describes the data model. Its public fields become the model roles. The struct must be equality-comparable.
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; }
Alternatively, the template argument can be a simple type supported by Qt Quick Ultralite (for example, int or Qul::qreal).
Then, declare a struct that derives directly from Qul::ListModel.
struct AlarmModel : Qul::ListModel<AlarmData> { private: Qul::DynamicList<AlarmData> m_data; public: // Implement the ListModel interface int count() const QUL_DECL_OVERRIDE { return m_data.count(); } AlarmData data(int index) const QUL_DECL_OVERRIDE { return m_data[index]; }
Note: Qul::ListModel must be the immediate and first base class of your model type, for the QML interface to work.
This struct may contain additional functions that the QML application can use to interact with the model:
void togglePause(int index) { m_data.at(index).running = !m_data[index].running; dataChanged(index); }
The modelReset and dataChanged signals are used to trigger a refresh of a view.
The modelReset signal must be emitted whenever number of elements of the model changes after it's instantiation by a view.
The dataChanged signal must be emitted whenever existing element of the model is modified.
Dynamic strings
Passing strings form C++ to QML has some implications on how glyphs are generated by the fontcompiler. It's possible that some characters will not be rendered in the QML by default. For more detailed description see Rendering dynamic strings in QML.
See also Models and Views in Qt Quick Ultralite, C++ Data Models, and Text Rendering and Fonts.
Member Function Documentation
[pure virtual]
int ListModel::count() const
Returns the number of data entries in the model.
See also StaticCount.
[pure virtual]
T ListModel::data(int index) const
Returns the data stored at the given index.
T ListModel::get(int index) const
Returns the item at index. Exists for QML interface compatibility.
See also data.
Member Variable Documentation
const int ListModel::StaticCount
The static member variable indicating the exact number of elements in the model, it must be overriden for the model to be used by a Repeater.
Note: This variable must be overridden by defining a static const int StaticCount the derived class.
See also count.
Signal<void (int)> ListModel::dataChanged
Emit this signal to tell the view to reload the data for the item at the given index.
See also modelReset.
Signal<void ()> ListModel::modelReset
Emit this signal to tell the view that the model needs to be reloaded. This must be emitted when the number of rows, is changed
See also dataChanged.
Available under certain Qt licenses.
Find out more.