gpt4 book ai didi

qt - 为什么没有静态 QDir::makepath()?

转载 作者:行者123 更新时间:2023-12-04 20:37:20 25 4
gpt4 key购买 nike

我知道,要从给定的绝对路径在 Qt 中创建新路径,您可以使用 QDir::makepath()dir.makepath(path) ,正如 this 中所建议的那样题。我在使用它时没有任何问题,并且工作正常。我的问题是针对 为什么开发人员不会提供静态函数以类似 QDir::makepath("/Users/me/somepath/"); 的方式调用.需要新建QDir实例对我来说似乎没有必要。

我只能想到两个可能的原因:

1. 开发人员“懒惰”或没有时间,所以他们没有添加,因为这不是绝对必要的。

2. QDir的实例其中mkpath(path)被调用,将被设置为 path同样,因此进一步使用会很方便 - 但我似乎找不到任何暗示这是 docs 中的实际行为。 .

我知道我重复了一遍,但我再次这样做 不是 在如何做到这一点上需要帮助,但我对为什么必须这样做很感兴趣。
感谢我可能错过的任何原因。

最佳答案

让我们来看看上述方法的代码:

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);很 slim 。创建对象的性能影响也可以忽略不计,因为如果您碰巧更频繁地执行操作,您将重用同一个对象。但在代码维护者方面,不维护同一方法的两个版本可以说更方便(更少的工作和更少的错误)。

关于qt - 为什么没有静态 QDir::makepath()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33000300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com