• 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)));
    
  • 相关阅读:
    selenium
    js兼容
    gcc 编译问题
    winrar 命令行 解压文件
    php 页面 不显示任何错误提示
    php 禁止谷歌蜘蛛抓取
    LINUX 实现端口转发
    phpredisadmin 莫名其妙错误,打开了无法显示任何数据
    Convert.ToInt32、(int)和int.Parse三者的区别
    C# 点击打开浏览器
  • 原文地址:https://www.cnblogs.com/During/p/12380200.html
Copyright © 2020-2023  润新知