Qt Quick Ultralite の API の概要
Qt for MCU 向けに開発された、Qt Quick のランタイムで利用可能な C++ の API のドキュメントが公開されていましたので紹介します。
Qul::Items::QtObject
C++ で QML のエレメントを生成するための基底クラスです。
struct MyObject : public Qul::Items::QtObject
{
void start();
};
public かつ、非 override な関数は QML からアクセス可能になります。
enum
クラス内で定義された enum は QML からも利用可能になります。
struct Task : public Qul::Items::QtObject
{
enum Status {
Success,
Error,
};
void start();
};
Qul::Property
QML のプロパティのためのクラスになります。
#include <qul/Property>
struct Task : public Qul::Items::QtObject
{
enum Status {
Success,
Error,
};
void start();
Qul::Property<int> interval;
};
プロパティのグループ化
{
struct Coordinate {
Qul::Property<float> lat;
Qul::Property<float> lng;
}
Coordinate coordinate;
Qul::Property<int> zoom;
};
構造体内構造体を作成すると、以下のようにグループ化が可能になります。
Qul::Signal
QML のシグナルのためのクラスになります。
#include <qul/Property>
#include <qul/Signal>
struct Task : public Qul::Items::QtObject
{
enum Status {
Stopped,
Running,
};
void start();
Qul::Property<int> interval;
Qul::Signal<void(Task::Status status)> finished;
};
Qul::Items::Singleton
QtObject の派生クラスで、QML のアイテムをシングルトン化し、グローバルにアクセスできるようにするための基底クラスになります。
struct Global : public Qul::Items::Singleton<Constants>
{
void doSomething();
};
Qul::Model
QML で利用するモデルの基底クラスになります。
struct ModelData {
int key;
int value;
};
struct MyModel : public Qul::Model<ModelData> {
std::vector<ModelData> m_data;
int count() const override {
return m_data.size();
}
ModelData get(int idx) const override {
return m_data.at(idx);
}
void append(int key, int value) {
ModelData data = { key, value };
m_data.push_back(data);
modelReset();
}
};
Qul::Timer
シンプルなタイマーになります。
void Task::start() {
Qul::Timer timer;
timer.onTimeout([this]() { finished(Success); });
timer.start(1000);
}
まとめ
QtObject や QtQml が提供している、これまでの Qt Quick での C++ とはまた違う形の API になっていますが、見た目もすっきりしていて分かりやすいですね。
Qt 6 では、こういった形でも書けるようになるのかと思うとワクワクしてきます。