【发布时间】:2016-03-07 19:06:11
【问题描述】:
我正在尝试为我的项目为 QML 制作一个自定义 TCP 小部件(WebSocket 发送一个 HTTP 请求,它不允许我发送原始 TCP 数据包)。我创建了“TCPSocketConnection”(在 cpp 中命名为 TCPSocketConn)类,并使用占位符方法为其提供了一些属性,并尝试将其插入 QML。当我尝试使用该类时,出现以下错误
qrc:/qml/qmlwebsocketclient/main.qml:43:9: Cannot assign to non-existent property "onTextMessageReceived"
我有一个这样的 QML 文件
****************************************************************************/
import QtQuick 2.0
import QtWebSockets 1.0
import Qt.Comm 2.0
Rectangle {
width: 360
height: 360
TCPSocketConnection{
id: socket
url: "ff"
onTextMessageReceived: {
console.log("On Recieve: " + messsage)
}
}
}
TCPSocketConnection定义如下
qmlRegisterType<TCPSocketConn>("Qt.Comm", 2, 0, "TCPSocketConnection");
在 tcpsocketconn.h 中
#ifndef TCPSOCKETCONN_H
#define TCPSOCKETCONN_H
#include <QQuickItem>
class TCPSocketConn : public QQuickItem
{
Q_PROPERTY(QString url READ url WRITE a_1 NOTIFY a_2)
Q_PROPERTY(QString message READ message WRITE a_3 NOTIFY textMessageRecieved)
Q_PROPERTY(int status READ status WRITE a_4 NOTIFY statusChanged)
public:
explicit TCPSocketConn(QQuickItem *parent = 0);
QString url();
QString message();
int status();
signals:
void a_2();
void textMessageReceived();
void statusChanged();
public slots:
void a_1(QString);
void a_3(QString);
void a_4(int);
};
#endif // TCPSOCKETCONN_H
带有占位符的 cpp 文件
#include "tcpsocketconn.h"
TCPSocketConn::TCPSocketConn(QQuickItem *parent) : QQuickItem(parent)
{
}
QString TCPSocketConn::url(){
return "";
}
QString TCPSocketConn::message(){
return "";
}
int TCPSocketConn::status(){
return 0;
}
void TCPSocketConn::a_1(QString d){
}
void TCPSocketConn::a_3(QString d){
}
void TCPSocketConn::a_4(int s){
}
void TCPSocketConn::textMessageReceived(){
}
void TCPSocketConn::statusChanged(){
}
void TCPSocketConn::a_2(){
}
【问题讨论】: