既存の 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 が機能しないのはなぜですか?