Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Май 10, 2011, 10:17



Название: connect(), QByteArray->QString
Отправлено: demaker от Май 10, 2011, 10:17
Пытаюсь написать программу-сервер.
Использую ui для создания графического интерфейса.
Сервер работает в отдельном потоке, интерфейс соответственно вглавном.

Хочу чтобы данные выводились в TextEdit после того,как срвер получит их от клиента.
для этого высылаю сигнал об окончании приема emit signalReceiveComplete(str);
Код
C++ (Qt)
#include "TCPServer.h"
#include "QDebug"
 
TCPServer::TCPServer()
{
 
}
 
void TCPServer::slotReadClient()
{
   QTcpSocket* pClientSocket = (QTcpSocket*)sender();
   qint64 numbytes;
 
   numbytes = pClientSocket->bytesAvailable();
 
   Buffer_IN.clear();
 
   while( pClientSocket->bytesAvailable() )
           Buffer_IN += pClientSocket->readAll();
 
   str = QString(Buffer_IN);
 
   //qDebug() << "str=" << str << endl;
 
   emit signalReceiveComplete(str);
   sendToClient(pClientSocket, Buffer_OUT);
}
 
void TCPServer::sendToClient(QTcpSocket * pSocket, const QByteArray &arOut)
{
   pSocket->write(arOut);
}
 
сам сокет сервера создается в отдельном потоке
Код
C++ (Qt)
MyServerThread::MyServerThread()
{
   m_nNextBlockSize = 0;
}
 
void MyServerThread::slot_setPort(QString text_port)
{
   nPort = text_port.toInt();
}
 
void MyServerThread::run()//(int nPort, QWidget* pwgt /*=0*/): QWidget(pwgt),m_nNextBlockSize(0)
{
   m_ptcpServer = new TCPServer();
   /* OBRABOTKA OSHIBKI SOEDINENIA */
   if(!m_ptcpServer->listen(QHostAddress::Any, nPort))
           {
               emit signal_errorServer(m_ptcpServer->errorString());
               //QMessageBox::critical(0,"Server Error", "Unable to start the server:" + m_ptcpServer->errorString());
               m_ptcpServer->close();
               return;
           }
 
   connect(m_ptcpServer, SIGNAL(newConnection()), this, SLOT(slotNewConnection()));
   exec();
}
 
/*virtual*/
void MyServerThread::slotNewConnection()
{
   QTcpSocket* pClientSocket = m_ptcpServer->nextPendingConnection();
 
   connect(pClientSocket, SIGNAL(disconnected()), pClientSocket, SLOT(deleteLater()) );
   connect(pClientSocket, SIGNAL(readyRead()), m_ptcpServer, SLOT(slotReadClient()) );
   emit signal_New_Connection("New connection");
}
 
У меня вот такой вопрс можно ли сделать вот такой connect

connect(ServerThread.m_ptcpServer,SIGNAL(signalReceiveComplete(QString)),ui->txt_edit,SLOT(append(QString))); ??? ??? ???

И еще , правильно ли я создал строку из массива Buffer_IN str = QString(Buffer_IN)  ??? ??? ???



Название: Re: connect(), QByteArray->QString
Отправлено: merke от Май 10, 2011, 11:03
Нету времени копашиться в твоем коде, скажу лишь одно, просто в своем потоке эмить сигнал с текстом сообщения, а в главном потоке отлавливай этот сигнал и связывай со слотом вывода текста


Название: Re: connect(), QByteArray->QString
Отправлено: Авварон от Май 10, 2011, 11:31
Можно вопрос? Нахрена тут вообще потоки?


Название: Re: connect(), QByteArray->QString
Отправлено: ieroglif от Май 10, 2011, 12:16
QString::QString ( const QByteArray & ba )
See also fromAscii(), fromLatin1(), fromLocal8Bit(), and fromUtf8().


Название: Re: connect(), QByteArray->QString
Отправлено: demaker от Май 10, 2011, 14:44
QString::QString(const QByteArray)
 
уже использовал этот метод и написал
str = QString(Buffer_IN)
или это неправильно ???


Название: Re: connect(), QByteArray->QString
Отправлено: demaker от Май 10, 2011, 14:47
Когда я пытался посмотреть через QDebug << str<<endl;
он мне выводил пустую строку, тогда как правильно записать???(QString::QString(const QByteArray&ba)


Название: Re: connect(), QByteArray->QString
Отправлено: ieroglif от Май 10, 2011, 18:09
Когда я пытался посмотреть через QDebug << str<<endl;
он мне выводил пустую строку, тогда как правильно записать???(QString::QString(const QByteArray&ba)
1. проверь qDebug() << Buffer_IN;
скорее всего он у тебя пустой,
2.  ??? попробуй вот так  QString str(Buffer_IN)
и где у тебя вообще str определена? код, увы, не самый понятный  ???


Название: Re: connect(), QByteArray->QString
Отправлено: demaker от Май 11, 2011, 09:50
str y меня определена в .h
Я вроде разобрался у меня все выводится только пришлось сделать

str.clear();
str.append(Buffer_IN.toHex());
qDebug() << "str=" << str << endl;
но не знаю правильно это или нет ???

если есть желание... могу выслать весь код :)


Название: Re: connect(), QByteArray->QString
Отправлено: ieroglif от Май 11, 2011, 09:51
str y меня определена в .h
Я вроде разобрался у меня все выводится только пришлось сделать

str.clear();
str.append(Buffer_IN.toHex());
qDebug() << "str=" << str << endl;
но не знаю правильно это или нет ???

если есть желание... могу выслать весь код :)
никакого желания, упаси небо  ;D работает - и ништяк  ;D