C++からQMLにQ_GADGETタグが付けられた構造体でシグナルを出力できます。QMLでQ_GADGET構造体の新しいインスタンスを作成する方法は?
このような構造体をQMLからC++スロットに送ることはできますか? QMLでインスタンスを作成するという最初のステップでコードが失敗します。
このコードは、最初の行に失敗した...
var bs = new BatteryState()
bs.percentRemaining = 1.0
bs.chargeDate = new Date()
DataProvider.setBatteryState(bs)
...エラーで:
qrc:///main.qml:34: ReferenceError: BatteryState is not defined
私はQMLにC++からBatteryStatus構造体を放出することができますが、私はしたいと思います1つのパラメータを1つのスロットに送ります。
// BatteryState.h
#pragma once
#include <QDate>
#include <QMetaType>
struct BatteryState
{
Q_GADGET
Q_PROPERTY(float percentRemaining MEMBER percentRemaining)
Q_PROPERTY(QDate date MEMBER date)
public:
explicit BatteryState();
BatteryState(const BatteryState& other);
virtual ~BatteryState();
BatteryState& operator=(const BatteryState& other);
bool operator!=(const BatteryState& other) const;
bool operator==(const BatteryState& other) const;
float percentRemaining;
QDate date;
};
Q_DECLARE_METATYPE(BatteryState)
// BatteryState.cpp
#include "BatteryState.h"
BatteryState::BatteryState()
: percentRemaining(), date(QDate::currentDate())
{}
BatteryState::BatteryState(const BatteryState& other)
: percentRemaining(other.percentRemaining),
date(other.date)
{}
BatteryState::~BatteryState() {}
BatteryState&BatteryState::operator=(const BatteryState& other)
{
percentRemaining = other.percentRemaining;
date = other.date;
return *this;
}
bool BatteryState::operator!=(const BatteryState& other) const {
return (percentRemaining != other.percentRemaining
|| date != other.date);
}
bool BatteryState::operator==(const BatteryState& other) const {
return !(*this != other);
}
私はmain.cppには、このタイプを登録します:
qRegisterMetaType<BatteryState>();
勧告ここで
はBatteryState.h & BatteryState.cppのですか?
http://doc.qt.io/qt-5/qtqml-cppintegration-definetypes.html#registering-an-instantiable-object-type? – bipll