[与这个问题相关]
我写了这段代码来理解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();
}
现在运行这个程序会使它陷入一个无限循环,寻找新的连接。
观察:如果我不调用app.exec(),程序会立即返回(应该是这样)。问题:为什么?
问题:如果我将槽连接为排队连接,那么槽调用将在何时执行?问题:如果app.exec()是一种无限循环,那么newConnection()信号如何被发出?
重要问题:这里是否涉及任何"第二个线程"?(我期望得到否定答案和一个优雅的解释:))
谢谢, jrh
附言:还有谁有这种嵌套括号综合症吗?像"(.. :))"或"(.. (..))"?
newConnection()
信号又是如何被发射的呢? - jrharshath