QSettings, QFileDialog портит путь по умолчанию
От: Тёма  
Дата: 01.04.20 14:20
Оценка:
Windows 10, Qt 4.8

Из отдельного потока, созданного через boost::thread, периодически вызывается QCoreApplication::postEvent, в целевом объекте вызывается customEvent примерно с таким кодом.
QSettings settings ("file.ini", QSettings::IniFormat);
log << settings.fileName();

В итоге в лог пишется имя файла настроек в виде <путь до программы>\file.ini

Одновременно с этими периодическими вызовами, совсем в другом месте программы, в основном потоке, пользователь через QFileDialog::getOpenFileName выбирает путь до файла, никак не связанного с тем объектом и его QSettings-ом.

Проблема: когда пользователь ходит по папкам в Open file диалоге, текущий путь в этом диалоге становится текущим путём для QSettings из кода выше. В итоге если пользователь выходит за пределы папки программы, файл с настройками перестаёт открываться. Изменение пути в этот момент видно в логе.

Собсно, какого хрена и что с этим делать?
Re: QSettings, QFileDialog портит путь по умолчанию
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.04.20 14:35
Оценка: 2 (1) +1
Здравствуйте, Тёма, Вы писали:


Тё>Собсно, какого хрена и что с этим делать?


Я так понимаю, что при старте программы текущим является путь, по которому лежит бинарник. QFileDialog просто изменяет текущий путь, вот всё и ломается.
Можно проверить, если запустить с другим Working Dir из-под отладчика, например.

Вообще, если мне надо что-то искать в каталоге, который в одной иерархии с bin каталогом проги, то я беру путь к исполняемому файлу и от него пляшу
Маньяк Робокряк колесит по городу
Re[2]: QSettings, QFileDialog портит путь по умолчанию
От: Тёма  
Дата: 06.04.20 12:38
Оценка:
Здравствуйте, Marty, Вы писали:

M>Я так понимаю, что при старте программы текущим является путь, по которому лежит бинарник.

Да, так и есть.

M>QFileDialog просто изменяет текущий путь, вот всё и ломается.

В целом так оно и выглядит. Не подозревал что текущий путь может меняться в ходе выполнения программы. Непонятно зачем QFileDialog это делает, если он всё равно полный путь возвращает и текущий путь возвращается к нормальному после закрытия диалога.

M>Вообще, если мне надо что-то искать в каталоге, который в одной иерархии с bin каталогом проги, то я беру путь к исполняемому файлу и от него пляшу

Буду теперь везде юзать qApp->applicationDirPath()
Re[3]: QSettings, QFileDialog портит путь по умолчанию
От: SaZ  
Дата: 07.04.20 09:26
Оценка: 6 (1)
Здравствуйте, Тёма, Вы писали:

M>>QFileDialog просто изменяет текущий путь, вот всё и ломается.

Тё>В целом так оно и выглядит. Не подозревал что текущий путь может меняться в ходе выполнения программы. Непонятно зачем QFileDialog это делает, если он всё равно полный путь возвращает и текущий путь возвращается к нормальному после закрытия диалога.

Это виндовая фишка для стандартного диалога. По умолчанию не стоит флаг OFN_NOCHANGEDIR для диалога открытия файла.
https://docs.microsoft.com/ru-ru/windows/win32/api/commdlg/ns-commdlg-openfilenamea

Я уже давно практикую в своих программах использование путей всегда относительно исполняемого файла.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.