alien1983 Temat założony przez niniejszego użytkownika |
[QT] dziedziczenie po QWebSocket błędy w kodzie » 2015-06-13 20:13:56 "websocketserver.h" #ifndef QWEBSOCKETUP_H #define QWEBSOCKETUP_H #include <QObject>
QT_FORWARD_DECLARE_CLASS( QWebSocketServer ) QT_FORWARD_DECLARE_CLASS( QWebSocket ) class QWebSocketUp : public QWebSocket { public: explicit QWebSocketUp(); ~QWebSocketUp(); signals: public slots: };
#endif
"websocketserver.cpp" #include "websocketserver.h" #include "QtWebSockets/qwebsocketserver.h" #include "QtWebSockets/qwebsocket.h" #include "qwebsocketup.h"
QWebSocketUp::QWebSocketUp() { }
QWebSocketUp::~QWebSocketUp() { }
poniższy kod nie działa: QWebSocketUp * pC = qobject_cast < QWebSocketUp *>( sender() ); pC = m_clients.last();
błędy: C:\Users\Piotr\Documents\QT\BitCoinFaucetServer\websocketserver.cpp:189: błąd: invalid conversion from 'QWebSocket*' to 'QWebSocketUp*' [-fpermissive] pC = m_clients.last(); ^
C:\Qt\Qt5.4.1\5.4\mingw491_32\include\QtCore\qobject.h:-1: In instantiation of 'T qobject_cast(QObject*) [with T = QWebSocketUp*]':
C:\Qt\Qt5.4.1\5.4\mingw491_32\include\QtCore\qglobal.h:694: błąd: invalid application of 'sizeof' to incomplete type 'QStaticAssertFailure<false>' enum {Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result, __COUNTER__) = sizeof(QStaticAssertFailure<!!(Condition)>)} ^
C:\Qt\Qt5.4.1\5.4\mingw491_32\include\QtCore\qglobal.h:699: in expansion of macro 'Q_STATIC_ASSERT' #define Q_STATIC_ASSERT_X(Condition, Message) Q_STATIC_ASSERT(Condition) ^
C:\Qt\Qt5.4.1\5.4\mingw491_32\include\QtCore\qobject.h:518: in expansion of macro 'Q_STATIC_ASSERT_X' Q_STATIC_ASSERT_X(QtPrivate::HasQ_OBJECT_Macro<ObjType>::Value, ^
^ |
|
turaz |
» 2015-06-14 12:22:23 Chyba ktoś usunął ten temat... (pamiętam, że wczoraj odpowiadałem na to samo pytanie) #ifndef QWEBSOCKETUP_H #define QWEBSOCKETUP_H
#include <QWebSocket>
class QWebSocketUp : public QWebSocket { Q_OBJECT public: QWebSocketUp( const QString & origin = QString(), QWebSocketProtocol::Version version = QWebSocketProtocol::VersionLatest, QObject * parent = 0 ); };
#endif
#include "qwebsocketup.h"
QWebSocketUp::QWebSocketUp( const QString & origin, QWebSocketProtocol::Version version, QObject * parent ) : QWebSocket( origin, version, parent ) { }
|
|
alien1983 Temat założony przez niniejszego użytkownika |
» 2015-06-14 12:52:13 Dzięki za odpowiedź.. Mam jeszcze tylko taki problem z tym: QWebSocketUp * pC = qobject_cast < QWebSocketUp *>( sender() ); pC = m_clients.last();
Wywala błąd : C:\Users\Piotr\Documents\QT\BitCoinFaucetServer\websocketserver.cpp:189: błąd: invalid conversion from 'QWebSocket*' to 'QWebSocketUp*' [-fpermissive] pClient = m_clients.last(); ^
wygląda na to że klasy są niekompatybilne i nie można przypisać QWebSocket do QWebSocketUp void WebSocketServer::onNewConnection() { QWebSocket * pSocket = m_pWebSocketServer->nextPendingConnection(); connect( pSocket, & QWebSocket::textMessageReceived, this, & WebSocketServer::processTextMessage ); connect( pSocket, & QWebSocket::binaryMessageReceived, this, & WebSocketServer::processBinaryMessage ); connect( pSocket, & QWebSocket::disconnected, this, & WebSocketServer::socketDisconnected ); ...
może wszędzie od razu podmienić w kodzie serwera QWebSocket na QWebSocketUp ? |
|
turaz |
» 2015-06-14 13:26:35 Jeżeli wszędzie używasz QWebSocketUp to podmień je gdzie jest to konieczne. Jeżeli twoja lista 'm_clients' zawiera QWebSocket to nie możesz przypisać tak poprostu do wskaźnika do klasy QWebSocketup obiektu QWebSocket. Najprościej będzie jeżeli lista również będzie posiadała QWebSocketUp. Mam nadzieję, że nie namieszałem. QWebSocketUp * pC = qobject_cast < QWebSocketUp *>( sender() ); pC = m_clients.last();
Chociaż nie do końca rozumiem sens tych dwóch linii (jeżeli są jedna pod drugą w kodzie, ale to już inna kwestia). |
|
alien1983 Temat założony przez niniejszego użytkownika |
» 2015-06-15 11:42:17 Jeszcze mam taki błąd: C:\Users\Piotr\Documents\QT\BitCoinFaucetServer\websocketserver.cpp:55: błąd: invalid conversion from 'QWebSocket*' to 'QWebSocketUp*' [-fpermissive] QWebSocketUp *pSocket = m_pWebSocketServer->nextPendingConnection(); ^
Wygląda na to że QWebSocketServer używa klasy QWebSocket ? |
|
turaz |
» 2015-06-15 16:17:59 w QWebSocketServer::incomingConnection( qintptr socketDescriptor ) stwórz QWebSocketUp i ustaw mu SocketDescriptor i następnie dodaj go przy użyciu QWebSocketServer::addPendingConnection() do kolejki. W newConnection jeżeli potrzebujesz to możesz wykonac qobject_cast QWebSocketu na QWebSocketUp. |
|
alien1983 Temat założony przez niniejszego użytkownika |
» 2015-06-15 16:48:22 Nie mam takiej metody jak QWebSocketServer::incomingConnection( qintptr socketDescriptor )
tylko taką: void WebSocketServer::onNewConnection() WebSocketServer == EchoServer z przykładów qt (zmieniłem nazwę)
kod na przykładzie echo server z qt
Tutaj coś jest o tym: http://www.codedisqus.com/7SxSUPjegk/qtcpserverincomingconnectionqintptr-socketdescriptor-is-it-possible-to-connect-with-specified-socket.html
|
|
turaz |
» 2015-06-16 19:35:05 Faktycznie, QWebSocketServer nie jest taki przyjemny jak QTcpServer. Wykorzystywałem tą metodę w QTcpServer'ze właśnie do inicjalizacji obiektów dziedziczących po QTcpSocket. W takiej sytuacji pytanie brzmi czy warto dziedziczyć po QWebSocket, czy nie lepiej napisać klasę, w której QWebSocket będzie polem prywatnym?
|
|
« 1 » 2 |