"QIODevice device not open" 仅在 Release 中构建时出现
"QIODevice device not open" only occurs when build in Release
我正在使用 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();
}
Q_ASSERT() is useful for testing pre- and post-conditions during
development. It does nothing if QT_NO_DEBUG was defined during
compilation.
Q_ASSERT 不会在 Release 中评估,因此您的文件不会被打开。
我正在使用 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();
}
Q_ASSERT() is useful for testing pre- and post-conditions during development. It does nothing if QT_NO_DEBUG was defined during compilation.
Q_ASSERT 不会在 Release 中评估,因此您的文件不会被打开。