[与这个问题有关]
我写了这段代码来了解 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:
为什么?
Question:
如果我已将插槽连接为排队连接,那么何时执行插槽调用?
Question:
如果app.exec()
是某种无限循环,newConnection()
信号是如何发出的?
Big Question:
他们这里有没有“第二条线索”?(我期待一个不,一个非常优雅的解释:))
谢谢,
jr
PS:还有谁有这种嵌套括号综合症?像“(.. :))”或“(..(..))”?