2015-10-07 59 views
4

我知道,爲了在給定的絕對路徑中創建Qt中的新路徑,您可以使用QDir::makepath()作爲dir.makepath(path),因爲它在this問題中建議使用。我沒有任何麻煩使用它,它工作正常。我的問題是針對爲什麼開發人員不會提供一個靜態函數來調用,如QDir::makepath("/Users/me/somepath/");。需要創建一個新的QDir實例對我來說似乎沒有必要。爲什麼沒有靜態QDir :: makepath()?

我只能想到兩個可能的原因:

開發商是「懶」或沒有時間,所以他們並沒有添加一個,因爲它不是絕對必要的。

2.mkpath(path)就叫QDir的情況下,將被設置爲path一樣,所以這將是方便今後使用 - 但我似乎無法找到任何線索,這是實際的行爲在docs之內。

我知道我重複自己,但同樣,我做需要幫助爲如何做到這一點,但我作爲爲什麼一個不得不這樣做的多大興趣。 謝謝我可能錯失任何理由。

回答

3

讓我們一起來看看該方法的代碼:

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);之間的差異很小。創建對象的性能影響也可以忽略不計,因爲如果您碰巧經常執行該操作,則會重複使用同一個對象。但在代碼維護者方面,可以說更方便(更少工作,更少錯誤傾向)到而不是維護同一方法的兩個版本。

+0

正如我所指出的,並且在文檔中還給出了另一種方法的示例,您可以將它作爲'QDir()。makepath(path);'編寫在一行中。 – ypnos

相關問題