Qt选择现有文件

时间:2015-08-20 01:01:17

标签: c++ qt file-io

我是Qt的新手,我希望能够选择一个名为default.ini的现有文件,该文件与exe位于同一目录中。我已经有一些代码允许我这样做,但用户必须每次都手动选择文件。

 QString file = QFileDialog::getOpenFileName(this, tr("Open File"), "/debug", tr("default (*.ini)"));

  if (file != NULL) {
    try {
      controller_->ConfigurationFileSave(file.toStdString());
        } catch (std::exception &e) {
      Logger::Log(std::string("Failed to save configuration: ") + e.what(), 
      Logger::kError);
    }
  }  

程序执行我想要它在写入/读取文件方面所做的一切,我只是不希望程序在打开文件时需要任何用户输入。我理解我有用户输入的原因是因为我正在使用QFileDialog类,我只想知道是否有另一个类自动执行它。感谢

编辑1 根据Arun的建议,我尝试使用Qfile。该程序现在可以从default.ini配置文件中成功读取,但不会保存到配置文件中。有没有一种简单的方法来写入文件?

 QFile file("default.ini");
 if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
 return;

 QString content = file.readAll();

 file.close();

 if (content != NULL) {
   try {
  controller_->ConfigurationFileSave(content.toStdString());
  } catch (std::exception &e) {
  Logger::Log(std::string("Failed to save configuration: ") + e.what(), 
      Logger::kError);
    }
  }

编辑2 根据Arun的第二个建议:

QFile file("default.ini");
file.open(QIODevice::ReadOnly | QIODevice::Text); 
QString line = file.readAll();
file.close();

file.open(QIODevice::WriteOnly | QIODevice::Text);
try {
  controller_->ConfigurationFileSave(line.toStdString());
} catch (std::exception &e) {
  Logger::Log(std::string("Failed to save configuration: ") + e.what(), 
      Logger::kError);
}
file.close();

2 个答案:

答案 0 :(得分:1)

以下是如何在不使用QFileDialog的情况下执行文件I / O的典型示例。 此示例使用QFile

QFile file("default.ini");
if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
    return;

while (!file.atEnd()) {
    QByteArray line = file.readLine();
    process_line(line);
}

答案 1 :(得分:1)

您的文件选择器代码将文件名传递给ConfigurationFileSave()。以下代码获取该文件名而不进行交互:

QDir appDir(QCoreApplication::applicationDirPath());
QFileInfo file(appDir, "default.ini");

// file.filePath() or file.absoluteFilePath() here:
controller_->ConfigurationFileSave( ___HERE___ );

您可以在QtCreator中通过创建一个新的控制台应用程序并将其用作main.c来进行测试:

#include <QCoreApplication>
#include <QDebug>
#include <QFileInfo>
#include <QDir>

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

    QDir appDir(QCoreApplication::applicationDirPath());
    QFileInfo file(appDir, "default.ini");

    qDebug() << "        " << file.filePath();
    qDebug() << "        " << file.absoluteFilePath();

    return 0;
}

输出:

silver:qt_app_dir hchapman$ ls
Makefile            main.cpp            main.o              qt_app_dir          qt_app_dir.pro      qt_app_dir.pro.user
silver:qt_app_dir hchapman$ ./qt_app_dir
     "/Users/hchapman/Desktop/qt_app_dir/default.ini"
     "/Users/hchapman/Desktop/qt_app_dir/default.ini"
silver:qt_app_dir hchapman$ cd ..
silver:Desktop hchapman$ ./qt_app_dir/qt_app_dir
     "/Users/hchapman/Desktop/qt_app_dir/default.ini"
     "/Users/hchapman/Desktop/qt_app_dir/default.ini"
silver:Desktop hchapman$