zoukankan      html  css  js  c++  java
  • Qt程序运行时出现Error

    ####### Qt程序在运行时出现了上述错误,并且我的程序出现了数据错乱的情况,百度后说是因为内存原因,段错误,仔细查看了自己的代码并没有发现 指针变量未初始化的情况。
    ####### 通过调试得出原因:QNetworkManager类,在使用时,可能在同一时间段内QNetworkRequestattribute被两个对象同时设定和使用,导致出现数据错乱,数据无法正常取出的情况!
    ####### 解决办法: 重新建立QNetworkManager分别针对不同的对象,这样它们attribute的使用区域不会重叠
    我编写这个函数的部分代码如下:

       // 请求开始
    void Request::get(void *attribute, QUrl url)
    {
        QNetworkRequest request(url);
        request.setAttribute(QNetworkRequest::Attribute(QNetworkRequest::User + 1), QVariant::fromValue(attribute));
        this->get(request);
    }
    
        // 请求完成
        QVariant attribute = request.attribute(QNetworkRequest::Attribute(QNetworkRequest::User + 1));
        if(attribute.isNull())
        {
            emit dataRequested(receivedData);
        }
        else
        {
            void * attributePointer = attribute.value<void *>();
            emit dataRequested(attributePointer, receivedData);
        }
    
     // 出错位置 
        // attribute首先在这里被占用
        void *widgetAttribute = (void *)homeMovieItem;
        this->homeImgRequest->get(widgetAttribute, QUrl(homeItem->imgPath));
        connect(this->imgRequest, SIGNAL(dataRequested(void*,QByteArray)), this, SLOT(onReceivedItemImg(void*,QByteArray)));
        // 这里attribute再次被占用
        void *widgetAttribute = (void *)actressWidgetItem;
        this->actressImgRequest->get(widgetAttribute, QUrl(actressItem->imgPath));
        connect(this->imgRequest, SIGNAL(dataRequested(void*,QByteArray)), this, SLOT(onReceivedActressImg(void*,QByteArray)));
    
  • 相关阅读:
    robotframework +selenium 自动化测试之浏览器与驱动的兼容问题。
    robotframework+selenium自动化robotramework版本问题
    一个业务逻辑引发的对多表连接的思考
    第一次接触WebSocket遇到的坑以及感受
    关于读写APP.config文件能读却写不了的问题
    poj2392 space elevator
    洛谷P1197 星球大战
    poj3421&poj3292&poj2689 基础数论
    洛谷P1006 传纸条
    挑战程序设计竞赛2.3节习题选解
  • 原文地址:https://www.cnblogs.com/During/p/12380200.html
Copyright © 2011-2022 走看看