// Copyright (C) 2021 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include #include #include int main() { //! [member] struct Coordinates { int x; int y; int z; QString toString() const { return u"[x: %1; y: %2, z: %3]"_s.arg(QString::number(x), QString::number(y), QString::number(z)); } }; QMetaType::registerConverter(&Coordinates::toString); //! [member] //! [memberOk] struct BigNumber { long long l; int toInt(bool *ok = nullptr) const { const bool canConvertSafely = l < std::numeric_limits::max(); if (ok) *ok = canConvertSafely; return l; } }; QMetaType::registerConverter(&BigNumber::toInt); //! [memberOk] //! [implicit] class Counter { int number = 0; public: int value() const { return number; } operator int() const { return value(); } void increment() {++number;} }; QMetaType::registerConverter(); //! [implicit] struct CustomStringType { const char *data() const {return nullptr;} }; //! [unaryfunc] QMetaType::registerConverter([](const CustomStringType &str) { return QString::fromUtf8(str.data()); }); QMetaType::registerConverter( [](const QJsonValue &value) -> std::optional { const auto object = value.toObject(); if (!object.contains("x") || !object.contains("y")) return std::nullopt; // The conversion fails if the required properties are missing return QPointF{object["x"].toDouble(), object["y"].toDouble()}; }); //! [unaryfunc] }