信号插槽不工作

时间:2013-08-18 06:51:30

标签: c++ qt signals slot

之前我使用过信号和插槽,从来没有遇到任何问题,但是现在我建立的新连接无法正常工作。我无法理解我做错了什么。

这是我的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()
{
    ...
}

我连接了所有项目的插槽和这样的信号,所有这些都在工作,但不是这个。我该如何解决这个问题?

0 个答案:

没有答案