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();
main.cpp
#include "server.hpp"
int main(int argc, char** argv)
QCoreApplication app(argc, argv);
Server srv;
return app.exec();
【讨论】:
以上是关于Qt 插槽连接成功但未被触发的主要内容,如果未能解决你的问题,请参考以下文章