gpt4 book ai didi

c++ - QDir::setCurrent 与 QFileInfo::

转载 作者:行者123 更新时间:2023-11-28 07:33:17 27 4
gpt4 key购买 nike

在为预先存在的 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 对象中的路径将被正确更新。

为什么案例 1 不起作用?

最佳答案

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

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

关于c++ - QDir::setCurrent 与 QFileInfo::,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17232605/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com