如何将QFile附加到QList <qfile>

时间:2019-01-24 15:01:48

标签: qt

我正在创建一个包含10到15张图像的表单数据请求。为了最大程度地减少代码,我使用QList来存储图像的位置

我尝试将 QList * files = new QList 更改为 QList files ,但我遇到错误

 C:\Qt_Projects\SecretaryApp\handler.cpp:130: error: no matching function for call to 'QList<QFile>::append(QFile*&)'
     files.append((tempfile));
                             ^

这是函数内部的代码

QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
multiPart->setBoundary("----WebKitFormBoundary7MA4YWxkTrZu0gW");


QList<QFile>  * files = new QList<QFile>;
QList<QHttpPart> fileparts;


for(int i=0;i<urls.length();i++)
{
    QFile * tempfile = new QFile(urls[i].toLocalFile());

    tempfile->open(QIODevice::ReadOnly);

    qDebug()<<urls[i].toLocalFile();

    files->append((tempfile));  <------error here
}


for(int i=0;i<urls.length();i++)
{
        QHttpPart filePart;
        filePart.setHeader(QNetworkRequest::ContentDispositionHeader,QVariant("form-data; name=\"uploadImage\"; filename="+files[i]->fileName()));
        filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpg"));   // file type header MIME type
        filePart.setBodyDevice(files[i]);

        fileparts.append(filePart);
}


for(int i=0;i<urls.length();i++)
        files[i].setParent(multiPart);

for(int i=0;i<urls.length();i++)
        multiPart->append(fileparts[i]);

QNetworkRequest request((QUrl(sendImageAPI)));

如何解决此错误。这可能吗 ?还是我最好使用向量?

2 个答案:

答案 0 :(得分:1)

更改

QList<QFile>  * files = new QList<QFile>;

QList<QFile * >  files;

或者如果您需要在堆上列出列表:

QList<QFile *>  * files = new QList<QFile *>;

因为您使用了QFile * <-指针

答案 1 :(得分:0)

除了@Xplatforms答案外,我还要补充一点,对于对象所有权,在使用new时应格外小心。我更喜欢使用:

QList<QFile *>  files

如果可以的话。如果您之后不手动调用delete,则可能会导致内存泄漏。由于您通过调用setParent转移所有权(假设multiPart已正确删除),因此QFiles正常。