我使用 QT 5 和 WebChannel 与 HTML 页面进行通信。
我成功地能够传达文本和字符串。不过我想传达一些点数据。
官方文档说
“不需要手动消息传递和数据序列化,”http://doc.qt.io/qt-5/qwebchannel.html http://doc.qt.io/qt-5/qwebchannel.html
当我尝试发送对象或数组而不是字符串时,应用程序会抛出以下消息:
不知道如何处理“数据”,请使用 qRegisterMetaType 来注册它。
如何使用 Point 类而不是字符串对象发出信号?或者将类序列化为字符串。
这是我想发送到 HTML 的对象
点类
class MyData{
public :
int x,y,z;
};
Q_DECLARE_METATYPE(MyData)
地图类
class MyMap : public QObject{
Q_OBJECT
public:
explicit MyMap ();
signals:
updateText(const QString &text); // registered
updateData(MyData &data); // Don't know how to handle 'data', use qRegisterMetaType to register it.
public slots:
receiveText(const QString &text);
};
和主要代码
qRegisterMetaType<MyData>();
// setup the channel
QWebChannel channel;
QObject::connect(&clientWrapper, &WebSocketClientWrapper::clientConnected, &channel, &QWebChannel::connectTo);
// setup the dialog and publish it to the QWebChannel
channel.registerObject(QStringLiteral("map"), &map);
map.updateText("text");
MyData data;
data.x=10;
data.y=12;
data.z=13;
map.updateData(data);