Как я могу получить QFileDialog для запроса перезаписи? - PullRequest
3 голосов
/ 15 февраля 2012

У меня есть QDialog, который открывает QFileDialog следующим образом:

QFileDialog fd(this);
fd.setFileMode(QFileDialog::AnyFile);

if (fd.exec()) {
    // save data to a file
}

К сожалению, поведение по умолчанию не кажется таким уж стандартным, и диалоговое окно файла не выдает подсказки о перезаписи, если я выбираю файл, который уже существует. Вызов setConfirmOverwrite(true) или setOption(QFileDialog::DontConfirmOverwrite, false) первым тоже не поможет. Я проверял это на Qt 4.7.3 и 4.7.4 на Ubuntu 11.04 и Windows XP.

Я оглянулся и нашел этот отчет об ошибке . QFileDialog::getSaveFileName() была эта проблема, но она была характерна для Maemo и исправлена ​​задолго до выхода Qt 4.7.3. Если я использую этот метод в своем приложении, он работает просто отлично, меня просят перезаписать файл. (Я не хочу использовать getSaveFileName() по несвязанным причинам.)

Я не могу найти никого, кто бы жаловался, что это не работает для них. Я что-то не так делаю, или это ошибка? Я думаю, это может быть связано с тем, что диалоговое окно не знает, является ли это простым диалоговым окном «Открыть», где подсказки не имеют смысла, но я не вижу способа сказать, что это диалоговое окно «Сохранить» (кроме установки параметра подтверждения-перезаписи, что не получается), а в документации действительно сказано, что по умолчанию должно быть приглашение.

1 Ответ

5 голосов
/ 14 марта 2013

Вы также должны быть уверены, что диалог находится в режиме сохранения, так как он не будет думать, что вы перезаписываете файл в открытом режиме. Вы можете сделать это, вызвав fd.setAcceptMode(QFileDialog::AcceptSave); в вашем примере кода. См. QFileDialog :: acceptMode .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...