之前我使用过信号和插槽,从来没有遇到任何问题,但是现在我建立的新连接无法正常工作。我无法理解我做错了什么。
这是我的Listener.hpp:
class Listener : public QObject
{
Q_OBJECT
public:
//explicit Listener(QObject *parent = 0);
explicit Listener();
void listen();
void stopListen();
bool isListening();
public slots:
void on_newConnection();
void on_readyRead();
void on_disconnected();
signals:
void readyToReadFromServer();
private:
QTcpServer* m_server;
QTcpSocket* m_socket;
};
这是我的Listener.cpp:
Listener::Listener()
{
m_server = new QTcpServer(this);
connect(m_server, SIGNAL(newConnection()), this, SLOT(on_newConnection()));
}
void Listener::listen()
{
string strPort = ConfigManager::instance().get("Channel.Port");
QString qstrPort(strPort.c_str());
qint16 port = qstrPort.toUInt();
m_server->listen(QHostAddress::Any, port);
//QCoreApplication::instance()->exec();
}
void Listener::stopListen()
{
m_server->close();
}
bool Listener::isListening()
{
return m_server->isListening();
}
void Listener::on_newConnection()
{
m_socket = m_server->nextPendingConnection();
if(m_socket->state() == QTcpSocket::ConnectedState)
{
printf("New connection established.\n");
}
connect(m_socket, SIGNAL(readyRead()), this, SLOT(on_readyRead()));
connect(m_socket, SIGNAL(disconnected()), this, SLOT(on_disconnected()));
}
void Listener::on_readyRead()
{
emit readyToReadFromServer();
}
void Listener::on_disconnected()
{
//...
}
我使用Controller
类连接所有信号 - 我的应用中的插槽和其他一些东西。
这是我的Controller.hpp(这个类有很多方法,信号槽,它们与这个问题无关,所以我没有提到它们):
class Controller : public QObject
{
Q_OBJECT
public slots:
void waitForCommands();
...
signals:
void greeting_send();
...
private:
Listener m_listener;
}
我用以下方法连接所有信号 - 插槽:
bool Controller::init()
{
...
this->connect(&m_listener, SIGNAL(readyToReadFromServer()), SLOT(waitForCommands()));
...
}
此类中还有waitForCommands()
方法:
void Controller::waitForCommands()
{
...
}
我连接了所有项目的插槽和这样的信号,所有这些都在工作,但不是这个。我该如何解决这个问题?