• 4998阅读
  • 0回复

slot函数没有被调用,不知道是什么原因,请教一下!!! [复制链接]

上一主题 下一主题
离线博越
 
只看楼主 倒序阅读 楼主  发表于: 2012-08-03
服务器
server.h
class Server : public QMainWindow
{
Q_OBJECT
public:
Server(QWidget *parent = 0, Qt::WFlags flags = 0);
~Server();
public:
Ui::ServerClass ui;
protected:
TcpServer tcpServer;
private slots:
  void doRecv();
     void doStart();
public:
QString* recv;
};

server.cpp

Server::Server(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
recv=new QString;
}
Server::~Server()
{
delete recv;
}
void Server::doRecv()
{
const QString str=*recv;
    ui.recvEdit->setText(str);
}
void Server::doStart()
{
//监听
while (!tcpServer.isListening() && !tcpServer.listen(QHostAddress::Any, 6000))  
{  
  QMessageBox::StandardButton ret = QMessageBox::critical(this,  
   QString::fromLocal8Bit("回环"),  
   QString::fromLocal8Bit("无法开始测试: %1.").arg(tcpServer.errorString()),  
   QMessageBox::Retry| QMessageBox::Cancel);
  if (ret == QMessageBox::Cancel)  
   return;  
}  
}

tcpserver.h
class TcpServer:public QTcpServer
{
Q_OBJECT//不能少啊,否则没有slots,没有moc!!!
public:
TcpServer();
~TcpServer();
private slots:
      void recvData();
protected:
      void incomingConnection(int socketDescription);
protected:
      QTcpSocket* m_socket;
};

tcpserver.cpp
#include "server.h"
TcpServer::TcpServer()
{

}
TcpServer::~TcpServer()
{

}
void TcpServer::recvData()
{
Server ser;
QByteArray inBlock=m_socket->readAll();
*(ser.recv)=QVariant(inBlock).toString();
}
void TcpServer::incomingConnection(int socketDescription)
{
m_socket=new QTcpSocket;
if (!m_socket->setSocketDescriptor(socketDescription))  //将两个套接字关联起来。
{  
  return;  
}  
    m_socket->waitForReadyRead();
connect(m_socket,SIGNAL(readyRead()),this,SLOT(recvData()));
}


客户端
client.h

class Client : public QMainWindow
{
Q_OBJECTpublic:
Client(QWidget *parent = 0, Qt::WFlags flags = 0);
~Client();
private:
Ui::ClientClass ui;
private slots:
  int doHostConnection();
  void doSend();
public:
QTcpSocket *m_socket;
QString send;
};
client.cpp
Client::Client(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
}Client::~Client()
{}int Client::doHostConnection()
{
m_socket=new QTcpSocket;
m_socket->connectToHost("127.0.0.1",6000);//连接成功后,会给m_socket分配一个socket描述符,
                                           //并把它传给服务器incomingconnection()。
QAbstractSocket::SocketState _connect_stat = m_socket->state();
if (_connect_stat==QAbstractSocket::ConnectingState)
{
  ui.status->setText(QString::fromLocal8Bit("成功"));
  return 0;
}
else
{
  ui.status->setText(QString::fromLocal8Bit("失败"));
  return 0;
}
}
void Client::doSend()
{
send=ui.sendEdit->toPlainText();
m_socket->write(send.toStdString().c_str());
m_socket->waitForBytesWritten();
}
tcpserver.cpp中巢函数recvData()没有被调用,而readyread()已触发,不知道什么原因,请大牛指示一下
快速回复
限100 字节
 
上一个 下一个