QDir :: setCurrent vs QFileInfo ::

时间:2013-06-21 10:07:25

标签: c++ qt qt4.8

在重新分配到预先存在的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不起作用?

1 个答案:

答案 0 :(得分:1)

QDir::setCurrent是一个静态函数,用于设置应用程序的当前路径。它不会修改任何QDir实例。

您应该使用QDir::setPath分配新路径(或使用QString运算符将QDir直接分配给=,因为转换是隐含的。)