Название: [Qt 4.2.2] Что использовать для выбора имени директории? Отправлено: Tamara от Август 09, 2007, 08:11 Задача: нужен путь для сохранения пакета документов (нескольких файлов с общим именем).
Хочется, чтобы выглядело это так: Открывается диалог выбора файла. Текущая директория Мои документы. В строке ввода имени файла по умолчанию введено некое Имя_Пакета (заранее заданное). При нажатии на "Открыть" (Сохранить, Ок... Короче, "Выбрать") возвращается путь к выбранной папке (т.е. если пользователь не менял ничего, то C:\Documents and Settings\UserName\Мои документы/Имя_Пакета), независимо от того создана она или нет. Варианты решения (в tpath полный путь к Мои документы/Имя_Пакета): Код:
В первом случае проблема: если папка уже существует, то выбрать ее нельзя. Во втором: невозможно задать имя создаваемой папки по умолчанию (т.е. к несозданной папке путь он не вернет, надо там дополнительно на кнопку Создать папку нажимать и имя руками вводить). Как добиться желаемого? Название: [Qt 4.2.2] Что использовать для выбора имени директории? Отправлено: -=QT=- от Август 09, 2007, 09:09 Проверять существует ли папка.
Это есть в QFileInfo. И если нет то предлагать создать папку или выбрать уже существующую. Тоесть стандартный алгоритм. :wink: Название: [Qt 4.2.2] Что использовать для выбора имени директории? Отправлено: Tamara от Август 09, 2007, 10:08 Проблема собственно в этом: как реализовать "предлагать создать папку или выбрать уже существующую" удобным для пользователя образом. Если использовать для этого диалог выбора существующей директории, то невозможно задать имя по умолчанию (а в большинстве случаев, пользователя бы это имя устроило). Т.е. либо надо создавать папку до открытия диалога и выделять ее в диалоге (это криво, т.к. может пользователь захочет сохранить пакет в другое место), либо пользователю всегда придется нажимать на "Создать папку" и вводить ее имя.
В случае с getSaveFileName невозможно выбрать уже созданную папку. Проблема собственно в том, что хотелось бы работать с папкой как с файлом (то что называется шаблон composite), а как это сделать непонятно. Т.е. при выборе куда сохранить файл все понятно: можно ввести новое имя можно выбрать существующий файл и переписать его. Когда директория является своего рода "файлом" (единой сущностью, пакетом документов) хотелось бы примерно того же. добавлено спустя 5 минут: Во! Придумала пример. Хочу диалог как в некоторых инсталляторах: сверху окошко выбора существующей директории, снизу поле для ввода имени новой папки (если не введено сохраняет в выбранную). Есть ли что-нить такое в Qt? Или все вручную писать? Название: [Qt 4.2.2] Что использовать для выбора имени директории? Отправлено: -=QT=- от Август 09, 2007, 10:20 Алгоритм:
1. Перед выводом формы о сохранении файла Код: QFileDialog::getSaveFileName .... проверяем существует ли путь по умолчанию, для сохранения тоесть: а) если он есть то папку для сохранения выводим в диалоге сохранения файла см. п 1 . б) если его нет то выводим сообщение, что папка по умолчанию для сохранения файла отсутствует и проедлагаем вариант - создать папку по умолчанию (ту которую Мы хотим), если пользователь отказался то выводим форму сохранения файла см. п 1 в корневой дирректории (или с другими вариантами). ИМХО мой вариант. 8) P. S. Я бы в таком случае сохранял бы значение папки по умолчанию. Вдруг пользователь изменит ее на собственную, а каждый раз указывать нудно :D Название: [Qt 4.2.2] Что использовать для выбора имени директории? Отправлено: Tamara от Август 09, 2007, 10:42 Видимо у меня с объясняловкой совсем туго сегодня... Я несколько не то имела ввиду.
Пункт а) невозможен. Если папка есть, то выбрать ее при помощи диалога сохранения файла в Qt невозможно (иначе и проблемы бы не было). Только при помощи getExistingDirectory. В моем случае, самой папки по умолчанию в большинстве случаев не существует. Поясню задачу: в программе есть сущность "пакет документов", у него есть номер и дата, его можно сохранить в папку ввиде нескольких файлов. При сохранении, по умолчанию, предлагается сохранить в папку, например, с именем "Мои документы/Номер_пакета Дата_пакета", должна быть простая возможность этот путь менять. Эта папка может существовать на момент сохранения или нет - не важно. Как при сохранении обычного файла. Ладно, видимо все-таки стандартными средствами Qt это не делается... Просто в какой-то другой библиотеке когда-то встречала, и подумала - а вдруг тут тоже есть... Название: [Qt 4.2.2] Что использовать для выбора имени директории? Отправлено: -=QT=- от Август 09, 2007, 11:09 а) невозможен. Если папка есть, то выбрать ее при помощи диалога сохранения файла в Qt невозможно (иначе и проблемы бы не было).
Код: void QFileDialog::setDirectory ( const QString & directory ) Название: [Qt 4.2.2] Что использовать для выбора имени директории? Отправлено: Tamara от Август 09, 2007, 11:55 Вот что значит велик и могуч... Выбрать не в смысле показать в диалоге, а в смысле, чтоб функция getSaveFileName вернула путь к созданной папке.
Функция setDirectory устанавливает текущую директорию для диалога сохранения файлов. Это все замечательно. Но дело в том, что именно выбрать ее нельзя. Попытаюсь объяснить максимально подробно. В этом диалоге нельзя выполнить сценарий: выбираем созданную директорию, жмем сохранить и в качестве результата выполнения функции получаем путь к этой директории. Там вообще нельзя нажать сохранить, если в поле ввода имени файла не написано ничего (а в случае использования setDirectory именно так и получается), так как это диалог выбора имени файла. Правду говорю. Честно-честно :wink: Название: [Qt 4.2.2] Что использовать для выбора имени директории? Отправлено: -=QT=- от Август 09, 2007, 12:12 Верю - верю :mrgreen:
Ну тогда писать собственную реализацию. И проще и функциональнее. |