Qt RemoteObjects

时间:2018-05-18 14:18:44

标签: 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();

  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)

我的rep文件如下:

#include "../model/Model.h"

class Remote {
  PROP(Model resultModel);

  SLOT(void resultModelChanged_slot(Model resultModel));
};

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

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

有没有人知道一些复杂的QtRemoteObject示例?我发现的示例非常简单并且有效(https://doc.qt.io/qt-5.10/qtremoteobjects-gettingstarted.html)但我没有找到复杂(自定义)类型的示例。

在关于rpc的文档中,我读到支持customTypes(https://doc.qt.io/qt-5.10/qtremoteobjects-repc.html

如果有人对这个问题有所了解,那会很棒......

由于

1 个答案:

答案 0 :(得分:2)

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

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

注意返回的值,operator <<必须返回与第一个参数相同的stream,即通过引用。

里面的类应该声明一个友元函数:

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