Qt5 远程对象 + 自定义类型,但不在 POD 中

Qt5 Remote Objects + custom type but not in POD

本文关键字:类型 POD 自定义 程对象 对象 Qt5      更新时间:2023-10-16

我想将大量自定义对象与 Qt5 远程对象一起使用。 当我读到时,它们可能不需要在 .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;
}
}

然后在 .代表:

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

从客户端,当我尝试执行检查卡((时。

所有声明QML的东西都是在启动应用程序后立即调用的 (在创建复制副本之前(。

任何人都可以给我一个完整的/工作示例如何使用自定义类 与 QT5 远程对象一起使用,而无需在 代表文件?

好的,事实证明这个问题与传递的结构无关。我有一个 无法生成的 REP 中的 PROP,因此实际上系统在尝试实例化副本时立即崩溃。