【发布时间】:2009-09-24 14:36:02
【问题描述】:
[与this question相关]
我编写这段代码是为了了解 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:这里有他们的“第二个线程”吗? (我期待一个不,一个非常优雅的解释:))
谢谢,
jrh
PS:还有谁有这种嵌套括号综合症?像“(.. :))”还是“(.. (..))”?
【问题讨论】:
标签: c++ qt signals-slots