Russian Qt Forum
Май 07, 2024, 16:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: connect(), QByteArray->QString  (Прочитано 3982 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Май 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)  Непонимающий Непонимающий Непонимающий

« Последнее редактирование: Май 10, 2011, 10:21 от Пантер » Записан
merke
Гость
« Ответ #1 : Май 10, 2011, 11:03 »

Нету времени копашиться в твоем коде, скажу лишь одно, просто в своем потоке эмить сигнал с текстом сообщения, а в главном потоке отлавливай этот сигнал и связывай со слотом вывода текста
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #2 : Май 10, 2011, 11:31 »

Можно вопрос? Нахрена тут вообще потоки?
Записан
ieroglif
Гость
« Ответ #3 : Май 10, 2011, 12:16 »

QString::QString ( const QByteArray & ba )
See also fromAscii(), fromLatin1(), fromLocal8Bit(), and fromUtf8().
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #4 : Май 10, 2011, 14:44 »

QString::QString(const QByteArray)
 
уже использовал этот метод и написал
str = QString(Buffer_IN)
или это неправильно Непонимающий
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #5 : Май 10, 2011, 14:47 »

Когда я пытался посмотреть через QDebug << str<<endl;
он мне выводил пустую строку, тогда как правильно записать???(QString::QString(const QByteArray&ba)
Записан
ieroglif
Гость
« Ответ #6 : Май 10, 2011, 18:09 »

Когда я пытался посмотреть через QDebug << str<<endl;
он мне выводил пустую строку, тогда как правильно записать???(QString::QString(const QByteArray&ba)
1. проверь qDebug() << Buffer_IN;
скорее всего он у тебя пустой,
2.  Непонимающий попробуй вот так  QString str(Buffer_IN)
и где у тебя вообще str определена? код, увы, не самый понятный  Непонимающий
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #7 : Май 11, 2011, 09:50 »

str y меня определена в .h
Я вроде разобрался у меня все выводится только пришлось сделать

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

если есть желание... могу выслать весь код Улыбающийся
Записан
ieroglif
Гость
« Ответ #8 : Май 11, 2011, 09:51 »

str y меня определена в .h
Я вроде разобрался у меня все выводится только пришлось сделать

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

если есть желание... могу выслать весь код Улыбающийся
никакого желания, упаси небо  Смеющийся работает - и ништяк  Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.133 секунд. Запросов: 22.