Qt5 Удаленные объекты + пользовательский тип, но не в POD - PullRequest
0 голосов
/ 09 октября 2018

Я хотел бы использовать множество пользовательских объектов с удаленными объектами Qt5.Поскольку я читал, они, возможно, не должны были быть созданы как PODs в файле .REP.Я попытался сделать следующее:

namespace my::api {
    class Card {
        Q_GADGET

        Q_PROPERTY(QString type READ type WRITE setType)
        [... removed property functions]
        Q_PROPERTY(QString id READ id WRITE setId)
        [... removed property functions]

        public:
        static void declareQML() {
            qRegisterMetaType<my::api::Card>("Card");
        }
    };

    inline QDataStream& operator<<(QDataStream& stream, const my::api::Card & value) {
        stream << value.type() << value.id();
        return stream;
    }

    inline QDataStream& operator>>(QDataStream& stream, quint::api::Card & value) {
        QString tmp;
        stream >> tmp;
        value.setType(tmp);

        stream >> tmp;
        value.setId(tmp);

        return stream;
    }

    class Result {
        Q_GADGET

        Q_PROPERTY(bool status READ status WRITE setStatus NOTIFY statusChanged)
    public:
        bool status() { return m_status; }
    public slots:
        void setStatus(bool p) { m_status = p;  emit statusChanged(); }
    private:
        bool m_status;

    public:

        static void declareQML() {
            qRegisterMetaType<my::api::Result>("Result");
        }

        Result() : m_code(false) {}
    };

    inline QDataStream& operator<<(QDataStream& stream, const my::api::Result & value) {
        stream << value.status();
        return stream;
    }

    inline QDataStream& operator>>(QDataStream& stream, my::api::Result & value) {
        bool tmp;
        stream >> tmp;
        value.setStatus(tmp);
        return stream;
    }
}

Затем сделать что-то подобное в .REP:

SLOT(checkCard(my::api::Card card));
SIGNAL(checkCardResponse(my::api::Result result));

Однако я получаю

Trying to construct an instance of an invalid type, type id: 1073676288
Trying to construct an instance of an invalid type, type id: 655615
Trying to construct an instance of an invalid type, type id: 1073676288

отклиент, когда я пытаюсь сделать checkCard ().

весь материал DeclareQML вызывается сразу после запуска приложения (до создания реплики).

Может кто-нибудь опубликовать мне полный /рабочий пример, как использовать пользовательские классы с удаленными объектами QT5 без создания пользовательских классов в качестве POD в файле REP?

1 Ответ

0 голосов
/ 10 октября 2018

Хорошо, оказалось, что проблема не имеет ничего общего с переданной структурой.У меня был PROP в REP, который не мог быть сгенерирован, поэтому практически система зависала, когда пыталась создать экземпляр реплики.

...