Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[QT] dziedziczenie po QWebSocket błędy w kodzie

Ostatnio zmodyfikowano 2015-06-17 13:20
Autor Wiadomość
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"
C/C++
#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 // QWEBSOCKETUP_H
"websocketserver.cpp"
C/C++
#include "websocketserver.h"
#include "QtWebSockets/qwebsocketserver.h"
#include "QtWebSockets/qwebsocket.h"
#include "qwebsocketup.h"

QWebSocketUp::QWebSocketUp()
{
   
}

QWebSocketUp::~QWebSocketUp()
{
   
}

poniższy kod nie działa:
C/C++
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,
     ^
                   ^
P-133528
turaz
» 2015-06-14 12:22:23
Chyba ktoś usunął ten temat... (pamiętam, że wczoraj odpowiadałem na to samo pytanie)
C/C++
#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 // QWEBSOCKETUP_H


C/C++
#include "qwebsocketup.h"

QWebSocketUp::QWebSocketUp( const QString & origin, QWebSocketProtocol::Version version, QObject * parent )
    : QWebSocket( origin, version, parent )
{
   
}
P-133549
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:

C/C++
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



C/C++
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 ?
P-133551
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.


C/C++
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).
P-133553
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 ?
P-133589
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.
P-133593
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

P-133596
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?

P-133643
« 1 » 2
  Strona 1 z 2 Następna strona