如何使用qt5.2在iPhone上编写文件

时间:2014-01-26 18:29:20

标签: ios qt qt5

我正在使用Qt5.2在iPhone上编写应用程序。当应用程序运行时,我想 将用户输入中的一些信息保存到文件中,以便下次用户启动应用程序时,他将获得保存信息。

我试着这样做:

QString cur_dir = QDir::currentPath();
QString init_file = cur_dir+"/init.xml";

QSettings settings( init_file, QSettings::IniFormat );
settings.setValue("General/SavedVariable", sel_label->text() );

但是当我验证这样做时,文件没有创建:

if( !QFileInfo( init_file ).exists() )
    std::cout << "FILE DOES NOT EXISTS " << std::endl;
else
    std::cout << "FILE EXISTS " << std::endl;

3 个答案:

答案 0 :(得分:3)

我找到了解决方案。您无法将文件保存在Bundle目录中。你必须 保存在Documents目录中。  以下是我过去常用的代码:

{
      QString cur_dir = QDir::currentPath();

      int found = cur_dir.lastIndexOf( "/" );

      QString leftSide = cur_dir.left(found+1);
      leftSide += "Documents";

      init_file = leftSide+"/init.xml";

      if( !QFileInfo( init_file ).exists() )
         writeConfig();
      else
         readConfig();
}

void
writeConfig( void )
{
    QSettings settings( init_file, QSettings::IniFormat );
    settings.setValue("General/SavedVariable", sel_label->text() );
}

void
readConfig( void )
{
    QSettings settings( init_file, QSettings::IniFormat );
    QString save_var = settings.value( "General/SavedVariable" ).toString();
    sel_label->setText( save_var );
}

这是一种方式。您还可以向您的项目添加一个客观的C文件.mm到您的 qt项目并直接获取文档路径。

NSString *rootPath = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory,
                                                           NSUserDomainMask,
                                                           YES) objectAtIndex:0];

答案 1 :(得分:0)

实际上在IOS中,您无法将文件保存在当前目录中(检查this)也不错。我使用QStandardPaths类并编写了这段代码以使其跨平台:

QString path = QStandardPaths::standardLocations( QStandardPaths::AppDataLocation ).value(0);

QDir myDir(path);
if (!myDir.exists()) {
    myDir.mkpath(path);
}
QDir::setCurrent(path);

现在,可以在当前目录中创建文件或目录。

答案 2 :(得分:0)

允许/期望应用程序写入iOS Documents目录。此处写入的数据是持久的,将在iTunes备份过程中备份。

#include <QStandardPaths>

QFile myfile(QStandardPaths::writableLocation(QStandardPaths::HomeLocation).append("/Documents/mystuff.txt"));
myfile.open(QIODevice::ReadWrite);