【问题标题】:QObject::connect cant connect signal to a slot of *this* objectQObject::connect 无法将信号连接到 *this* 对象的插槽
【发布时间】:2018-10-08 20:54:10
【问题描述】:

标题可能难以理解,抱歉。

我的插槽连接信号有问题。没有编译错误,但连接返回 false。 控制台打印错误行:

QObject::connect: No such slot QObject::clientConnected_() in ../server/server.cpp:8

我认为问题在于连接在类 Server 中看不到插槽 clientConnected_()。或者可能出于某种原因在类 QObject 中寻找它。

代码如下:

服务器.h

#ifndef SERVER_H
#define SERVER_H

#include <QtNetwork>
#include <QTcpServer>
#include <QObject>

class Server : public QObject
{
    Q_OBJECT
public:
    bool startListening(const quint16 port);
public slots:
    static void clientConnected_();
private:
    QTcpServer * server_;
};

#endif // SERVER_H

服务器.cpp

#include "server.h"

#include <iostream>

bool Server::startListening(const quint16 port)
{
    server_ = new QTcpServer();
    QObject::connect(server_,SIGNAL(newConnection()),this,SLOT(clientConnected_()));
    return server_->listen(QHostAddress::Any,port);
}

void Server::clientConnected_()
{
    std::cout << "Connection established!" << std::endl;
    return;
}

有什么想法吗?

【问题讨论】:

  • 我已经测试了你的代码,我只是添加了一个构造函数,编译没有问题,请提供minimal reproducible example
  • 使用新样式连接:connect(server_, &amp;QTcpServer::newConnection, this, &amp;Server::clientConnected_);。旧的连接方式的问题是它不会在编译时告诉你它是否已经连接,它只是在运行时对你大喊大叫,所以建议使用新的语法。 `

标签: c++ qt qt-signals qobject qt-slot


【解决方案1】:

static void clientConnected_();

改成

私人插槽: void clientConnected_();

【讨论】:

    【解决方案2】:

    如前所述,您应该将您的 'void clientConnected_()' 标记为非静态的(您无法连接到静态成员,但如果您愿意,可以从插槽调用静态方法)。您还必须在“插槽”部分声明插槽,以使 MOC 能够解析您的插槽。

    您可以在这里找到更多信息http://doc.qt.io/qt-5/signalsandslots.html

    【讨论】:

      猜你喜欢
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多