在重新分配到预先存在的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,将新路径1st分配给QFileInfo对象,然后在该对象上调用 absoluteDir()返回更新的QDir对象。
然后,您可以直接将返回的对象分配给预先存在的QDir对象(通过重写的赋值运算符),并且将正确更新QDir对象中的路径。
为什么CASE 1不起作用?
答案 0 :(得分:1)
QDir::setCurrent
是一个静态函数,用于设置应用程序的当前路径。它不会修改任何QDir
实例。
您应该使用QDir::setPath
分配新路径(或使用QString
运算符将QDir
直接分配给=
,因为转换是隐含的。)