Russian Qt Forum

Qt => Работа с сетью => Тема начата: voral от Октябрь 30, 2009, 21:19



Название: QT4:: Cannot queue arguments of type 'QAbstractSocket::SocketState'
Отправлено: voral от Октябрь 30, 2009, 21:19
Делаю клиент-сервер. Изучаю работу Qthread и QTcp... .

В QT Асистенте нашел что QTcpSocket имеет сигнал stateChanged ( QAbstractSocket::SocketState ) унаследованный от QAbstractSocket. В соответствии с этим пишу:
Код
C++ (Qt)
void FortuneThread::run()
{
   QTcpSocket tcpSocket;
   if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
           emit error(tcpSocket.error());
       return;
   }
   connect(&tcpSocket,SIGNAL(stateChanged(QAbstractSocket::SocketState)),this,SLOT(stateChanged(QAbstractSocket::SocketState)));
   qDebug() << "Server thread: starting";
   this->exec();
}
void FortuneThread::stateChanged (QAbstractSocket::SocketState socketState) {
    qDebug() << "Server thread: state changed";
}
 
 
При коннекте клиента в консоли появляется:

QObject::connect: Cannot queue arguments of type 'QAbstractSocket::SocketState'
(Make sure 'QAbstractSocket::SocketState' is registered using qRegisterMetaType().)

Из описания я понял, что нужно использовать qRegisterMetaType для своих классов. И вызывать там где создаются экземпляры этого самого объекта.
Но ведь QAbstractSocket::SocketState QT-шная штука.....

Подозреваю, что я сделал что то не так. Поправьте.
Или где вставить qRegisterMetaType?

#include <QAbstractSocket> - имеется


Название: Re: QT4:: Cannot queue arguments of type 'QAbstractSocket::SocketState'
Отправлено: andrew.k от Ноябрь 02, 2010, 21:20
Q_DECLARE_METATYPE( QAbstractSocket::SocketError); // в .h
qRegisterMetaType<QAbstractSocket::SocketError>(); // в конструкторе или где угодно, но до QObject::connect(...)


Название: Re: QT4:: Cannot queue arguments of type 'QAbstractSocket::SocketState'
Отправлено: andrew.k от Ноябрь 02, 2010, 21:27
Вот чего мне не удалось добиться так это использовать в сигналах и слотах свой класс и чтобы передача параметра была по ссылке.
Кто умеет?