[相关这个问题 https://stackoverflow.com/questions/1450500]
我写这段代码是为了理解 qt 信号和槽是如何工作的。我需要有人来解释这种行为,并告诉我我自己的结论是否正确。
我的程序:
connectionhandler.h
#ifndef CONNECTIONHANDLER_H
#define CONNECTIONHANDLER_H
#include <QTcpServer>
class ConnectionHandler : public QObject
{
Q_OBJECT
public:
ConnectionHandler();
public slots:
void newConn();
private:
QTcpServer *server;
};
#endif // CONNECTIONHANDLER_H
connectionhandler.cpp
#include "connectionhandler.h"
#include <QTextStream>
ConnectionHandler::ConnectionHandler() {
server = new QTcpServer;
server->listen(QHostAddress::LocalHost, 8080);
QObject::connect(server, SIGNAL(newConnection()),this, SLOT(newConn()));
}
void ConnectionHandler::newConn() {
QTextStream out(stdout);
out << "new kanneksan!\n";
out.flush();
}
main.cpp
#include <QCoreApplication>
#include "connectionhandler.h"
int main(int argc, char* argv[]) {
QCoreApplication app(argc,argv);
ConnectionHandler handler;
return app.exec();
}
现在,运行该程序会将其发送到无限循环中寻找新连接。
Observation:
如果我不打电话app.exec()
,程序立即返回(正如它应该的那样)。
Question:
why?
Question:
如果我已将插槽作为排队连接进行连接,那么何时执行插槽调用?
Question:
if app.exec()
是一个无限循环,如何newConnection()
信号曾经发出过吗?
Big Question:
这里涉及他们的“第二条线索”吗? (我期待一个不,以及一个非常优雅的解释:))
Thanks,
jrh
PS:还有谁有这种嵌套括号综合症?像“(..:))”或“(..(..))”?