Qt 插槽连接成功但未被触发

Posted

技术标签:

【中文标题】Qt 插槽连接成功但未被触发【英文标题】:Qt slot connected successful but wasn't fired 【发布时间】: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。 您确定连接到服务器吗?如何?端口号应该与打开的端口号相对应,顺便说一句。 【参考方案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();

【讨论】:

以上是关于Qt 插槽连接成功但未被触发的主要内容,如果未能解决你的问题,请参考以下文章

Qt 插槽未被调用

当 Qt-5 连接失败时

未连接的 Qt 插槽被调用

Qt 插槽同时断开连接并从不同线程调用

Qt连接两个信号和一个插槽

Qt C++ 信号和槽没有触发