我知道,要从给定的绝对路径创建Qt中的新路径,您可以使用QDir::makepath()作为dir.makepath(path),正如这问题中所建议的那样。我在使用它方面没有任何困难,而且它工作得很好。我的问题是针对的,为什么开发人员不会提供一个静态函数来像QDir::makepath("/Users/me/somepath/");那样调用。对我来说,需要创建一个新的QDir实例似乎是不必要的。
我只能想出两个可能的原因:
1.开发人员“懒惰”或没有时间,所以他们没有添加一个,因为这不是绝对必要的。
2. --调用mkpath(path)的QDir实例--也将被设置为path,因此方便进一步使用--但我似乎找不到任何迹象表明这是文档中的实际行为。
我知道我重复了一遍,但我再次重申,我不需要在如何做这方面的帮助,但我非常感兴趣的是,为什么一个人必须这样做。谢谢,因为任何原因我都可能错过。
发布于 2015-10-08 15:55:38
让我们看一下上述方法的代码:
bool QDir::mkdir(const QString &dirName) const
{
const QDirPrivate* d = d_ptr.constData();
if (dirName.isEmpty()) {
qWarning("QDir::mkdir: Empty or null file name");
return false;
}
QString fn = filePath(dirName);
if (d->fileEngine.isNull())
return QFileSystemEngine::createDirectory(QFileSystemEntry(fn), false);
return d->fileEngine->mkdir(fn, false);
}来源:http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qdir.cpp#n1381
正如我们所看到的,静态版本很容易实现:
bool QDir::mkdir(const QString &dirName) const
{
if (dirName.isEmpty()) {
qWarning("QDir::mkdir: Empty or null file name");
return false;
}
return QFileSystemEngine::createDirectory(QFileSystemEntry(dirName), false);
}(另见http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qdir.cpp#n681)
首先,非静态方法有一些优点.显然,使用对象的现有文件引擎是有意义的。而且,我还可以想象在特定目录下创建几个目录的用例( QDir已经指向了这个目录)。
那么,为什么不同时提供两者呢?
裁决(tl/dr):我认为原因是简单的代码卫生。当您使用API时,QDir::makepath(path);和QDir().makepath(path);之间的差别很小。创建对象的性能影响也可以忽略不计,因为如果您更频繁地执行操作,您将重用同一个对象。但是在代码维护人员方面,可以说,不维护同一方法的两个版本更方便(工作量更小,错误更少)。
https://stackoverflow.com/questions/33000300
复制相似问题