Qt connect 信号槽多次连接后,会多次触发槽函数的问题

前言:

最近写代码发现,有俩个个connect函数。就简称为connect_1,connect_2
1.在软件起来的第一次,进行了一次connect_1,connect_2。正常
2.在新的界面点击按钮,发信号给原界面。接收到后,执行了一些操作后。再重新调用connect_1,connect_2后,发现connect_1是正常的,connect_2就有问题了,槽函数SLOT()执行了两次。

void Widget::refresh_weather_api(QString city, QString city_id)
{
    qDebug() << __LINE__ << "city_id:" << city_id;
    qDebug() << __LINE__ << "city:" << city;

    if(!city_id.isEmpty())
    {
        //刷新天气
        ui->currCity_label->setText(city);
        ui->currCityID_label->setText(city_id);
        //发送天气请求,获取的数据getReplyFinished进行处理
        setNetworkRequestWeather(network_request, city_id);
        connect(manage_weather,SIGNAL(finished(QNetworkReply *)),this,SLOT(getReplyFinished(QNetworkReply*)));
        manage_weather->get(network_request);
    }
}

void Widget::refresh_weather_kqzl_api(QString city, QString city_id)
{
    qDebug() << __LINE__ << "city_id:" << city_id;
    qDebug() << __LINE__ << "city:" << city;

    if(!city_id.isEmpty())
    {
        //发送天气请求,获取的数据getReplyFinished进行处理
        setNetworkRequestWeatherKongQiZhiliang(network_request_weather_kqzl, city_id);
        connect(manage_weather_kqzl,SIGNAL(finished(QNetworkReply *)),this,SLOT(getReplyFinishedForWeatherKqzl(QNetworkReply*)));
        manage_weather_kqzl->get(network_request_weather_kqzl);
    }
}

在这里插入图片描述
第一次connect是获取天气,第二次获取空气质量。

出现的现象:

可以看到connect_2获取空气质量,槽函数执行了两次,第一次是正常的,第二次是空的。这样就不能刷新天气了。一样的操作conne_1则是正常的。-
在这里插入图片描述

思路:

connect建立部分,放到初始化部分,只实例化时调用一次,避免了多次创建connect信号与槽的问题。
第一种:
设置,使用一个QNetworkRequest,设置不同的request.setUrl(QUrl(requst_url_str));
第二种:
其实问题的根本原因:就是要避免多次创建信号与槽。


在这里插入图片描述
修改为如下:
在这里插入图片描述

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值