2013-06-21 28 views
0

我在Qt中遇到一個異常(v4.8.4)時重新分配給預先存在的QDir對象的新路徑。下面是一個例子降低這表明:的QDir :: VS的setCurrent :: QFileInfo

QString path1("F:/"); //Path must exist... 
    QString path2("F:/Some/Valid/Path/For/You/"); //Path must exist... 

    //Set default... 
    QFileInfo fi1(path1); 
    QDir d(fi1.absoluteDir()); 

    //CASE 1... 
    if(!d.setCurrent(path2)) { 
     qDebug() << QString("Cannot set path (%1)").arg(path2).toAscii().data(); 
     return -1; 
    } 

    qDebug() << "CASE 1:"; 
    qDebug() << QString("path2: %1").arg(path2).toAscii().data(); 
    qDebug() << QString("d : %1").arg(d.absolutePath()).toAscii().data(); 
    //END of CASE 1... 


    //CASE 2... 
    QFileInfo fi2(path2); 
    d = fi2.absoluteDir(); 

    qDebug() << "CASE 2:"; 
    qDebug() << QString("path2: %1").arg(path2).toAscii().data(); 
    qDebug() << QString("d : %1").arg(d.absolutePath()).toAscii().data(); 
    //END of CASE 2... 

即使到d.setCurrent(PATH2)返回真正通話,新的路徑沒有在一個QDir對象設置。 OTOH,指定新的路徑1日到QFileInfo對象,然後調用absoluteDir()該對象上返回一個更新的QDir對象。

可以然後直接將返回的對象預先存在的QDir對象(通過重寫賦值運算符),並在一個QDir對象的路徑將被正確更新。

爲什麼CASE 1不起作用?

回答

1

QDir::setCurrent是靜態函數,其設定的應用程序的電流路徑。它不修改任何QDir實例。

您應該使用QDir::setPath分配一個新的路徑(或指定QString直接QDir=運營商,因爲轉換是隱含的)。

+0

的確!我實際上錯過了 - setCurrent適用於應用程序的「工作目錄」。謝謝回答。 – ObjectMonkey