在iOS设备上找不到文件Qt Creator C ++ QStandardPaths :: standardLocations(QStandardPaths :: DownloadLo cation);

时间:2017-10-05 14:29:50

标签: c++ ios qt

我正在使用Qt Creator C ++ QStandardPaths :: standardLocations(QStandardPaths :: DownloadLo cation);到达用户的文件,但它不返回在iOS设备上找到的文件。到目前为止,这是我的代码:

const QStringList
mPathList = QStandardPaths::standardLocations(QStandardPaths::DownloadLo‌​cation);
mPath = QString("%1").arg(mPathList.first());
dirmodel = new QFileSystemModel (this);
dirmodel->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
dirmodel->setRootPath(mPath); 

1 个答案:

答案 0 :(得分:0)

在iOS上,所有应用程序都存在于自己的沙箱中,您永远无法直接访问应用程序外的文件/文件。

为此,您需要在运行时从应用程序调用本机iOS API。 最好不要在下次启动应用程序时保存使用它们的路径,因为iOS会为sandobox中的应用程序生成基于哈希的路径,并且可以在下次运行应用程序时更改这些路径。

这里是如何在Qt中调用本机iOS代码的示例。

使用以下内容创建ios_utils.mm并将其添加到项目的源目录中:

#include "ios_utils.h"
#include <QStringList>
#include <UIKit/UIKit.h>
#include <qpa/qplatformnativeinterface.h>


QStringList getiOSHomeFolder()
{
    QStringList retval;

    NSString *item;
    NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSHomeDirectory() error:nil];

    for (item in contents)
    {
        retval.append(QString::fromNSString(item));
    }

    return retval;
}

创建ios_utils.h

#ifndef IOSUTILS_H
#define IOSUTILS_H


#ifdef Q_OS_IOS

QStringList getiOSHomeFolder();

#endif // Q_OS_IOS

#endif // IOSUTILS_H

和你的Qt代码中的某个地方:

#include "ios_utils.h"

qDebug() << getiOSHomeFolder();