2013-06-21 5 views
0

J'ai rencontré une anomalie dans Qt (v4.8.4) lors de la réaffectation d'un nouveau chemin à un objet QDir préexistant. Voici un exemple réduit cette démonstration:QDir :: setCurrent vs 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... 

Même si l'appel à d.setCurrent (path2) retours vrai, le nouveau chemin n'est pas définie dans l'objet QDir. OTOH, en affectant le nouveau chemin 1er à un objet QFileInfo, puis en appelant absoluteDir() sur cet objet renvoie un objet QDir mis à jour.

Vous pouvez ensuite affecter directement l'objet retourné à un objet QDir préexistant (via l'opérateur d'affectation remplacé), et le chemin dans l'objet QDir sera correctement mis à jour.

Pourquoi le CASE 1 ne fonctionne-t-il pas?

Répondre

1

QDir::setCurrent est une fonction statique qui définit le chemin actuel de l'application. Il ne modifie aucune instance QDir.

Vous devez utiliser QDir::setPath pour attribuer un nouveau chemin (ou affecter le QString directement à QDir avec l'opérateur =, car la conversion est implicite).

+0

En effet! J'ai en fait manqué cela - que setCurrent s'applique au 'répertoire de travail' de l'application. Merci de répondre. – ObjectMonkey

Questions connexes