我的程序需要读取/写入文本(只需几行)文件及其设置到磁盘。在代码中指定路径可能在一个平台上运行良好,如Windows,但如果在Linux上运行它,则路径不是跨平台的。
我正在寻找一种类似QSettings
的解决方案,它可以将设置保存到不同的路径,或者有其本机方式来处理这个问题。程序员不需要处理细节。但是文本文件不适合保存为QSettings
中的值。
无需用户交互即可获得此类路径。文本文件应该在应用程序重新启动时保持不变。它不能是临时文件。
Qt中是否存在现有的解决方案以及应该使用的API是什么?
答案 0 :(得分:9)
特定于应用程序的设置存储的位置因平台而异。 Qt 5通过QStandardPaths
提供了合理的解决方案。
通常,您会在QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)
中存储每个用户的设置。如果您希望设置不会在Windows上的用户漫游配置文件中保留,则可以使用QStandardPaths::AppLocalDataLocation
,它在非Windows平台上具有AppDataLocation
的含义。
在使用标准路径之前,您必须使用QCoreApplication::setApplicationName
或setOrganizationName
通过setOrganizationDomain
和您所在组织的名称设置应用名称。路径将取决于这些,因此请确保它们对您而言是独一无二的。如果您更改了它们,您将无法访问旧设置,因此请确保您坚持使用对您有意义的名称和域名。
不保证路径存在。如果没有,您必须自己创建,例如使用QDir::mkpath
。
int main(int argc, char ** argv) {
QApplication app{argc, argv};
app.setOrganizationDomain("stackoverflow.com");
app.setApplicationName("Q32525196.A32535544");
auto path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
if (path.isEmpty()) qFatal("Cannot determine settings storage location");
QDir d{path};
if (d.mkpath(d.absolutePath()) && QDir::setCurrentPath(d.absolutePath())) {
qDebug() << "settings in" << QDir::currentPath();
QFile f{"settings.txt"};
if (f.open(QIODevice::WriteOnly | QIODevice::Truncate))
f.write("Hello, World");
}
}
答案 1 :(得分:-1)
如果要保存一些与用户相关的数据,可以使用QDir::homePath()
获取用户主目录路径。
答案 2 :(得分:-1)
有QDir
来处理dirs的路径,QFileInfo
用于处理与平台无关的文件信息和QDir
&#39; s homePath()
我的建议是使用这些类并使用QDir::home()
或QDir::homePath()
来查找要写入的目录,因为用户在其homedir中具有写入权限,并且它存在于每个平台上。
答案 3 :(得分:-1)