C++ Qt远程对象
我尝试用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();
#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&);