带QDomDocument的QRemoteObject [QtRO]

时间:2016-10-04 22:46:45

标签: c++ qt

我可以在REPC生成的副本中使用QDomDocument信号/插槽吗? 关于QtRO

的问题

我用简单的例子测试了QtRemoteObject,但是一旦我将QDomDocument添加到.rep文件中,我就会收到错误:

/Qt/5.7/android_armv7/include/QtCore/qmetatype.h: In instantiation of 'constexpr int qMetaTypeId() [with T = QDomDocument]':
/Qt/5.7/android_armv7/include/QtCore/qmetatype.h:1752:27:   required from 'constexpr int qRegisterMetaType() [with T = QDomDocument]'
rep_pingpong_replica.h:32:41:   required from here
/Qt/5.7/android_armv7/include/QtCore/qglobal.h:746:47: error: static assertion failed: Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt's meta-object system

.rep文件

#include <QDomDocument>

class PingPong {
    SLOT(void ping(QString msg));
    SLOT(void pingXml(QDomDocument xml));
    SIGNAL(pong(QString msg));
}

.rep文件不允许Q_DECLARE_METATYPE 在我的应用程序中,我只是在使用 qRegisterMetaType(&#34; QDomDocument&#34); 对于信号/插槽,但我不知道如何用QtRemoteObject做到这一点?

最好的问候

马立克

1 个答案:

答案 0 :(得分:0)

我已经成功了, 在使用编译错误生成rep文件之后,编辑它们并在类体之前粘贴QDataStream定义,如果在signal / slot中有多个具有QDomDocument的类,则需要ifndef

#ifndef _xml_operator_
#define _xml_operator_
Q_DECLARE_METATYPE(QDomDocument)
inline QDataStream& operator<<(QDataStream& out, QDomDocument xml)
{
out << xml.toString();
return out;
}
inline QDataStream& operator>>(QDataStream& in, QDomDocument& xml)
{
    QString msg;
    in >> msg;
    xml.setContent(msg);
return in;
}
#endif //_xml_operator_