只connect了一次,只发送了一次Signal,但槽函数执行了9次

Sean10 2017-06-11 09:11:46
#include "mainwindow.h"
#include <QApplication>
#include "centralairconditioner.h"
#include "databasecontrol.h"
#include "client.h"

centralAirConditioner airConditioner ;
int checkConnect;

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
client *x = new client;
MainWindow *w= new MainWindow;;

checkConnect = 0;
//QThread *thread = new QThread(x);
//x->moveToThread(thread);
//thread->start();
QObject::connect(&airConditioner, SIGNAL(SignalInit()), w, SLOT(Init()));
//bool isConnected;
QObject::connect(w, SIGNAL(DataLogin(QString, QString)), x, SLOT(Login(QString, QString)),Qt::DirectConnection);
//qDebug() << "isConnected:" << isConnected;

QObject::connect(x, SIGNAL(TransMainWindow(int, float, float)), &airConditioner, SLOT(RevState(int, float, float)));
QObject::connect(x, SIGNAL(RefreshCost(QString, QString)), &airConditioner, SLOT(RevCost(QString, QString)));
QObject::connect(&airConditioner, SIGNAL(SignalRequestEnd()), x, SLOT(SendRequestEnd()));
//明明只连接了一次,但为什么槽函数却执行了多次呢?
//QObject::connect(&airConditioner, SIGNAL(SignalRequest()), x, SLOT(SendRequest()));
QObject::connect(&airConditioner, ¢ralAirConditioner::SignalRequest, x, &client::SendRequest, Qt::UniqueConnection);

QObject::connect(&airConditioner, SIGNAL(SignalBlowSpeed()), x, SLOT(SendBlowSpeed()));

QObject::connect(x, SIGNAL(SignalChangeTemperature()), &airConditioner, SLOT(ChangeTemperature()));
QObject::connect(x, SIGNAL(SignalChangeBlowSpeed()), &airConditioner, SLOT(ChangeBlowSpeed()));
//databaseControl database;
QObject::connect(w, SIGNAL(SignalLogout()), x, SLOT(Logout()));
QObject::connect(x, SIGNAL(SignalRefresh()), w, SLOT(Refresh()));

if(!w->UserRegister())
{
w->close();
//this->hide();
//待修正关闭事件
}
//w->Init();
//qDebug() << "test";
w->show();
w->ShowWidgetMain();
return a.exec();
}


上面的是我的主函数,主要通过这里的connect来调用各个模块里的函数,我的主要模块是一个centralAirCondtioner,存储对数据的操作,client模块,用Tcp协议,发socket包给服务端操作,还有一个主界面MainWindow,界面。
现在就是主函数里

QObject::connect(&airConditioner, ¢ralAirConditioner::SignalRequest, x, &client::SendRequest, Qt::UniqueConnection);

这一行的信号和槽出现了问题,centralAirConditioner模块里的emit SignalRequest在调试的时候确定只执行了一次,即下面qDebug()里的制冷制暖只输出了一次,但在服务端我却收到了9次Request。
void client::SendRequest()
{
QString a="request/"+QString::number(airConditioner.GetTemperature(), 'f', 2)+"/"+QString::number(airConditioner.GetWorkTemperature(), 'f', 2);
socket->write(a.toLatin1());
}


void centralAirConditioner::ChangeWorkTemperature(float tmp)
{
//qDebug() << __func__ << tmp;
workTemperature = tmp;
if(fabs(temperature - workTemperature) > 0.01) //当工作温度和房间温度不相等时
{
sendMux=1;
if(temperature < workTemperature && workModel == 1) //满足制热条件
{
sendMux=2;
emit SignalRequest();
qDebug()<<"制热";

}
else if(temperature > workTemperature && workModel == 0) //满足制冷条件
{
sendMux=2;
emit SignalRequest();
qDebug()<<"制冷";
}
else
{
sendMux=0;
}
qDebug() << __func__ << "1" << temperature << workTemperature;
}
qDebug() << __func__ << "2 "<< temperature << workTemperature;
}





...全文
269 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sean10 2017-06-12
  • 打赏
  • 举报
回复
引用 1 楼 qq_20553613 的回复:
这说明你socket通信有问题,检查这块。
谢谢~不过我的服务端接收到的9次request是下面这样的

"request/25.00/24.00"
Get request_in 1
Get request _out 1
Get request 1
"request/24.90/24.00"
Get request _out 1
Get request 1
"request/24.80/24.00"
Get request _out 1
Get request 1
"request/24.70/24.00"
Get request _out 1
Get request 1
"request/24.60/24.00"
Get request _out 1
Get request 1
"request/24.50/24.00"
Get request _out 1
Get request 1
"request/24.40/24.00"
Get request _out 1
Get request 1
"request/24.30/24.00"
Get request _out 1
Get request 1
"request/24.20/24.00"
Get request _out 1
Get request 1
"request/24.10/24.00"
每一下发送socket,里面的变量都有被改变,我理解的更像是纯粹这个函数被调用了9次……请问还是我理解错了?
Acuity. 2017-06-12
  • 打赏
  • 举报
回复
这说明你socket通信有问题,检查这块。

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧