【问题标题】:"QIODevice device not open" only occurs when build in Release“QIODevice 设备未打开”仅在 Release 中构建时出现
【发布时间】:2017-05-28 19:31:49
【问题描述】:

我正在使用 QNetworkAccessManager 传输文件。我的程序在 Debug 中构建时运行没有任何问题。但是在Release内置的时候出现了一个奇怪的问题: QIODevice::read (QFile, "my file path"): 设备未打开

我的代码有什么问题? 感谢您的帮助!

QHttpMultiPart* getPacket(QString imgPath)
{
    QHttpMultiPart *pMultiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);

    QFile *imgFile = new QFile(imgPath);
    imgFile->setParent(pMultiPart);
    Q_ASSERT(imgFile->open(QIODevice::ReadWrite));

    QHttpPart imagePart;
    imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
    imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"img\"; filename=\"target.jpg\""));
    imagePart.setBodyDevice(imgFile);
    pMultiPart->append(imagePart);

    return pMultiPart;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    JTest testObj;
    QNetworkAccessManager manager;

    QHttpMultiPart *pHMP = getPacket("F:/Temp/1.jpg");
    QNetworkReply *pNR = manager.put(QNetworkRequest(QUrl("http://192.168.11.102:8080/Test")), pHMP);
    QObject::connect( pNR, SIGNAL(finished()), &testObj, SLOT(handleTransmissionFinished()) );

    return a.exec();
}

【问题讨论】:

    标签: qt qtnetwork qiodevice


    【解决方案1】:

    Q_ASSERT() 可用于在测试期间测试前置条件和后置条件 发展。如果 QT_NO_DEBUG 在 编译。

    Q_ASSERT 不会在 Release 中进行评估,因此您的文件不会被打开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2020-07-13
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      相关资源
      最近更新 更多