【问题标题】:Qt slot connected successful but wasn't firedQt 插槽连接成功但未被触发
【发布时间】:2014-06-06 13:55:06
【问题描述】:

我尝试通过QTcpServer 类的newConnection() 信号调用我类的插槽。 connect() 函数返回true,但槽没有被执行。

这是我做的:

class server : QObject
{
    Q_OBJECT

public:
    server();

    QTcpServer *srv;
    void run();

public slots:
    void handleClient();
}

绑定槽:

void server::run()
{
    srv = new QTcpServer();

    bool status = connect(srv, SIGNAL(newConnection()), this, SLOT(handleClient()));

    // status contains true now

    srv->listen(QHostAddress::Any, port);
}

槽体:

void server::handleClient()
{
        /* This code is not being executed */
        qDebug() << "zxc";
        QMessageBox msg;
        msg.setText("zxc");
        msg.exec();
}

为什么它不起作用?

【问题讨论】:

  • 看起来不错。将 Q_OBJECT 宏添加到您的类后,您是否调用了 qmake?
  • 查看listen的返回值,如果返回的是false,请将errorString()中的字符串添加到问题中。
  • @ValentinHeinitz,是的,我做了这个。
  • @skyhisi,它返回true。
  • 您确定连接到服务器吗?如何?端口号应该与打开的端口号相对应,顺便说一句。

标签: qt signals-slots qtcpserver


【解决方案1】:

我不太确定你做错了什么尝试在继承行中添加public (: public QObject)。

以下代码适用于我:

server.hpp

#ifndef _SERVER_HPP_
#define _SERVER_HPP_
#include <QtNetwork>

class Server : public QObject
{
  Q_OBJECT
  public:
    Server();
  private slots:
    void handleClient();
  private:
    QTcpServer* mServer;
};
#endif

server.cpp

#include "server.hpp"

Server::Server() : mServer(new QTcpServer())
{
  connect(mServer, SIGNAL(newConnection()), this, SLOT(handleClient()));
  mServer->listen(QHostAddress::Any, 10000);
}

void Server::handleClient()
{
  while (mServer->hasPendingConnections())
  {
    QTcpSocket* skt = mServer->nextPendingConnection();
    skt->write("READY\n");
    skt->waitForReadyRead(5000);
    qDebug() << skt->readAll();
    skt->write("OK\n");
    skt->waitForBytesWritten();
    skt->close();
    skt->deleteLater();
  }
}

ma​​in.cpp

#include "server.hpp"

int main(int argc, char** argv)
{
  QCoreApplication app(argc, argv);
  Server srv;
  return app.exec();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2015-03-14
    • 2016-11-10
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多