C++ Qt远程对象

C++ Qt远程对象,c++,qt,C++,Qt,我尝试用Qt远程对象发送自定义对象 我这样宣布我的班级: #include <QDebug> #include <QObject> #include <QDataStream> class Model : public QObject { Q_OBJECT public: explicit Model(QObject *parent = nullptr); Model(const Model &other); ~Model();

我尝试用Qt远程对象发送自定义对象

我这样宣布我的班级:

#include <QDebug>
#include <QObject>
#include <QDataStream>

class Model : public QObject {
  Q_OBJECT
public:
  explicit Model(QObject *parent = nullptr);

  Model(const Model &other);

  ~Model();

  bool operator!=(Model &other);
  Model operator=(Model &other);

  QDataStream operator<<(const Model&);
  Model operator>>(const QDataStream);
signals:

public slots:

public:
  QString text1;
  QString text2;

};

Q_DECLARE_METATYPE(Model)
当我尝试构建应用程序时,出现以下错误:

error: no match for ‘operator<<’ (operand types are ‘QDataStream’ and ‘const Model’)
         stream << *static_cast<const T*>(t);

错误:“运算符”不匹配它必须在全局范围内声明,在类之外:

QDataStream &operator<<(QDataStream &stream, const Model&);

它必须在全局范围内声明,在类之外:

QDataStream &operator<<(QDataStream &stream, const Model&);

这将修复编译错误,但实际上不适用于定义的.rep文件。Qt不支持复制Qt QObject,因为connect()和所有权基本上是未定义的。您可以在.rep中使用CLASS关键字来解决这个问题(它在内部创建了一个额外的副本),但是这个特性的文档已经落后了。这里有一个例子:这将修复编译错误,但实际上不适用于定义的.rep文件。Qt不支持复制Qt QObject,因为connect()和所有权基本上是未定义的。您可以在.rep中使用CLASS关键字来解决这个问题(它在内部创建了一个额外的副本),但是这个特性的文档已经落后了。例如:
friend QDataStream &operator<<(QDataStream &stream, const Model&);