Russian Qt Forum

Qt => Вопросы новичков => Тема начата: thewizard от Январь 31, 2013, 19:53



Название: Ошибка проверки пути на абсолютность на Linux.
Отправлено: thewizard от Январь 31, 2013, 19:53
Здравствуйте.
Столкнулся с ошибкой при проверки абсолютности пути средствами Qt на Linux, если пусть начинается с символа двоеточия. Qt определяет такой путь, как абсолютный, что неверно для Linux.
Вот минимальный код для воспроизведения:
Код
C++ (Qt)
qDebug() << QDir::isAbsolutePath(":");
qDebug() << QDir(":").isAbsolute();
qDebug() << QFileInfo(":").isAbsolute();
 
Данный код напечатает true для всех трёх способов.
Версия Qt 4.7.0, Linux - Kubuntu 10.04.4 LTS, версия ядра 2.6.32-41-generic, x86_64. На более новых версиях Qt и Linux проверить сейчас нету возможности, но чуть позже обязательно это сделаю.

Проблема заключается даже не в этих методах (их можно заменить на свой, благо это просто), а в том, что из-за этого метод QDir::cd() не работает правильно, если нам нужно перейти в папку, имя которой начинается с двоеточия. Дело в том, что в этом методе в начале проверяется не абсолютный ли путь, а потом путь проверяется на существование. Очевидно, такого пути не существует в системе, если рассматривать его как абсолютный (потому что он не абсолютный). И в итоге метод возвращает ошибку. Приходится вместо
Код
C++ (Qt)
QString path = ":t-0012288";
current_directory.cd(path);
 
писать
Код
C++ (Qt)
QString path = ":t-0012288";
current_directory.setPath(current_directory.absolutePath() + QDir::separator() + path);
 
что менее красиво и логично.
Я смотрел исходники Qt, но ошибки не нашёл - для Unix-систем проверка на абсолютность делается самым логичным образом: если первый символ - слеш, то путь абсолютный. Как может возникать баг - не знаю.

Собственно, вопросы.
  • Вы сталкивались с этим?
  • Может я всё таки что-то делаю не так и ошибка не в Qt, а у меня где-то?
  • Что можете посоветовать? Как бы решили ситуацию вы?


Название: Re: Ошибка проверки пути на абсолютность на Linux.
Отправлено: Old от Январь 31, 2013, 19:56
Почитай про ресурсы а документации: The Qt Resource System
С двоеточия начинаются файлы в ресурсах.


Название: Re: Ошибка проверки пути на абсолютность на Linux.
Отправлено: thewizard от Январь 31, 2013, 20:17
Почитай про ресурсы а документации: The Qt Resource System
С двоеточия начинаются файлы в ресурсах.

Давно не использовал ресурсы, поэтому забыл об этом. Но в указанной вами статье написано:
Цитировать
By default, resources are accessible in the application under the same file name as they have in the source tree, with a :/ prefix, or by a URL with a qrc scheme.
То есть для идентификации доступа к ресурсам используется префикс ":/", а следовательно, одно двоеточие в начале пути не должно трактоваться как начало пути к ресурсу.

Так что проблема, видимо, в другом.


Название: Re: Ошибка проверки пути на абсолютность на Linux.
Отправлено: kuzulis от Январь 31, 2013, 21:05
А если двоеточие заекскейпить?

Код
C++ (Qt)
QString path = "\:t-0012288";