can*_*noe 8 c++ qt cross-platform
我的程序需要读取/写入文本(只有几行)文件及其设置到磁盘.在代码中指定路径可能在一个平台上运行良好,如Windows,但如果在Linux上运行它,则路径不是跨平台的.
我正在寻找一个类似的解决方案QSettings,将设置保存到不同的路径或具有其本机方式来处理这个.程序员不需要处理细节.但是文本文件不适合保存为值QSettings.
不需要用户交互来获得这样的路径.文本文件应该在应用程序重新启动时保持不变.它不能是临时文件.
Qt中是否存在现有解决方案,应该使用哪种API?
Rei*_*ica 10
特定于应用程序的设置存储的位置因平台而异.Qt 5通过提供合理的解决方案QStandardPaths.
通常,您将存储每个用户的设置QStandardPaths::writableLocation(QStandardPaths::AppDataLocation).如果您希望设置不在Windows上的用户漫游配置文件中保留,您可以使用QStandardPaths::AppLocalDataLocation,它具有AppDataLocation非Windows平台上的含义.
在使用标准路径之前,必须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");
}
}
Run Code Online (Sandbox Code Playgroud)