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 из кода выше. В итоге если пользователь выходит за пределы папки программы, файл с настройками перестаёт открываться. Изменение пути в этот момент видно в логе.
Собсно, какого хрена и что с этим делать?
Здравствуйте, Тёма, Вы писали:
M>>QFileDialog просто изменяет текущий путь, вот всё и ломается.
Тё>В целом так оно и выглядит. Не подозревал что текущий путь может меняться в ходе выполнения программы. Непонятно зачем QFileDialog это делает, если он всё равно полный путь возвращает и текущий путь возвращается к нормальному после закрытия диалога.
Это виндовая фишка для стандартного диалога. По умолчанию не стоит флаг OFN_NOCHANGEDIR для диалога открытия файла.
https://docs.microsoft.com/ru-ru/windows/win32/api/commdlg/ns-commdlg-openfilenamea
Я уже давно практикую в своих программах использование путей всегда относительно исполняемого файла.