我是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();
答案 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$