0

既存の QDir オブジェクトに新しいパスを再割り当てするときに、Qt (v4.8.4) で異常に遭遇しました。以下は、これを示す簡略化された例です。

    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)への呼び出しはtrueを返しますが、新しいパスは QDir オブジェクトに設定されていません。OTOH、最初に新しいパスを QFileInfo オブジェクトに割り当て、次にそのオブジェクトでabsoluteDir()を呼び出すと、更新された QDir オブジェクトが返されます。

その後、返されたオブジェクトを既存の QDir オブジェクトに (オーバーライドされた代入演算子を介して) 直接割り当てることができ、QDir オブジェクトのパスは正しく更新されます。

CASE 1 が機能しないのはなぜですか?

4

1 に答える 1