17 QString toString()
const {
return u"[x: %1; y: %2, z: %3]"_s.arg(QString::number(x),
19 QString::number(z)); }
21 QMetaType::registerConverter<Coordinates, QString>(&Coordinates::toString);
28 int toInt(
bool *ok =
nullptr)
const {
29 const bool canConvertSafely = l < std::numeric_limits<
int>::max();
31 *ok = canConvertSafely;
35 QMetaType::registerConverter<BigNumber,
int>(&BigNumber::toInt);
42 int value()
const {
return number; }
43 operator
int()
const {
return value(); }
44 void increment() {++number;}
46 QMetaType::registerConverter<Counter,
int>();
49 struct CustomStringType {
50 const char *data()
const {
return nullptr;}
53 struct CustomPointType{
59 QMetaType::registerConverter<CustomStringType, QString>([](
const CustomStringType &str) {
60 return QString::fromUtf8(str.data());
62 QMetaType::registerConverter<QJsonValue, CustomPointType>(
63 [](
const QJsonValue &value) -> std::optional<CustomPointType> {
64 const auto object = value.toObject();
65 if (!object.contains(
"x") || !object.contains(
"y"))
67 return CustomPointType{object[
"x"].toDouble(), object[
"y"].toDouble()};