QDir :: setCurrent vs QFileInfo ::

Я столкнулся с аномалией в Qt (v4.8.4) при повторном назначении нового пути к уже существующему объекту QDir. Вот сокращенный пример, демонстрирующий это:

    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 (путь2) возвращается правда, новый путь не задан в объекте QDir. OTOH, присваивая новый путь 1-му объекту QFileInfo, а затем вызывая absoluteDir () для этого объекта возвращает обновленный объект QDir.

Затем вы можете напрямую назначить возвращенный объект ранее существовавшему объекту QDir (через переопределенный оператор присваивания), и путь в объекте QDir будет корректно обновлен.

Почему CASE 1 не работает?

0

Решение

QDir::setCurrent является статической функцией, которая устанавливает текущий путь приложения. Это не изменяет любой QDir пример.

Вы должны использовать QDir::setPath назначить новый путь (или назначить QString прямо к QDir с = оператор, так как преобразование неявное).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]