当前位置: 代码迷 >> QT开发 >> qt的connect联系关系
  详细解决方案

qt的connect联系关系

热度:56   发布时间:2016-04-25 03:20:32.0
qt的connect关联
本帖最后由 maliang351 于 2014-05-16 11:50:42 编辑
connect的机制是:当SIGNAL被触发时,执行SLOT函数。
那么这个SLOT函数应该是被立即执行的,但是,在使用的过程中,我在SLOT中修改了全局变量msg的值,然后再connect之后紧接着qDebug() << msg; 但是msg的值并没有被修改,仍然是默认的空。如果在SLOT中直接qDebug() << msg,这样就没有问题。
我想问的是:信号触发执行了SLOT函数,为什么看不到修改全局变量的效果。

在.h中:
有定义全局变量 :Send_Msg

在.cpp中:
1)构造函数中
  tcpServer = new QTcpServer(this);
  tcpServer->listen(QHostAddress::LocalHost, SERVERPORT);
  connect(tcpServer, SIGNAL(newConnection()), this, SLOT(DisplayMsg()));  // tcpServer会监听,有新的连接建立时会执行显示函数
2)DisplayMsg()函数中,
tcp2Client = tcpServer->nextPendingConnection();  // 获取下一个挂起的连接
connect(tcp2Client, SIGNAL(readyRead()), this, SLOT(ReadMsg()));    // 这里的connect是问题所在!!!
qDebug() << Send_Msg.msg();     // 这样输出为空,msg没有写入

3)void MainWindow::ReadMsg()    // SLOT函数代码
{
  // ......   完成读取过程(测试过肯定正确)
qDebug() << Send_Msg.msg();     // 这样输出就成功,成功显示收到的msg消息。
}
------解决方案--------------------
那么这个SLOT函数应该是被立即执行的
不是这么理解的。
------解决方案--------------------
QT从发信号到槽函数响应,中间很慢的,比VC的消息响应还要慢


------解决方案--------------------
这个和信号的触发速度没有关系,慢了,只要是按顺序调用也没问题。
这个主要和 信号 和 槽 的 连接方式有关
QObject::connnect 还有第五个参数,你可以看一下。
  相关解决方案