Qfiledialog выбор нескольких файлов

Обновлено: 01.07.2024

На этом шаге рассмотрим стандартное диалоговое окно выбора файлов.

Использование стандартных окон значительно ускоряет разработку тех приложений, в которых необходимо использовать диалоговые окна выбора файлов, шрифта, цвета и т. д. Вместо того чтобы тратить время на разработку своих собственных классов, можно воспользоваться готовыми классами библиотеки Qt. К достоинствам стандартных диалоговых окон можно отнести и целостность пользовательского интерфейса, т. к. вид окон во всех приложениях, их использующих, будет один и тот же.

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

Класс QFileDialog предоставляет реализацию диалогового окна выбора файлов (рис. 1) и отвечает за создание и работоспособность сразу трех диалоговых окон. Одно из них позволяет осуществлять выбор файла для откры-тия, второе предназначено для выбора пути и имени файла для его сохранения, а третье — для выбора каталога.


Рис.1. Диалоговое окно выбора файлов

Класс QFileDialog унаследован от класса QDialog. Его определение находится в файле QFileDialog.

Этот класс предоставляет следующие статические методы:

  • getOpenFileName() — создает диалоговое окно выбора одного файла. Этот метод возвращает значение типа QString, содержащее имя и путь выбранного файла (см. рис. 1);
  • getOpenFileNames() — создает диалоговое окно выбора нескольких файлов. Возвращает список строк типа QStringList, содержащих пути и имена файлов;
  • getSaveFileName() — создает диалоговое окно сохранения файла. Возвращает имя и путь файла в строковой переменной типа QString;
  • getExistingDirectory() — создает окно выбора каталога. Этот метод возвращает значение типа QString, содержащее имя и путь выбранного каталога.

Первым параметром этих методов является указатель на объект-предок, вторым передается текст заголовка окна, третьим — строка, представляющая собой рабочий каталог.

Вызов метода getOpenFileName() запустит диалоговое окно открытия файла (см. рис. 1). Четвертый параметр, передаваемый в этот метод, представляет собой фильтр (или маску), задающий расширение файлов. Например:

Покажем, как можно использовать статический метод getSaveFileName(), предназначенный для диалогового окна записи файла.

Файлы приложения можно взять здесь.

При помощи метода getExistingDirectory() можно предоставить пользователю возможность выбора каталога (рис. 2). Например:


Рис.2. Диалоговое окно выбора папки

Файлы приложения можно взять здесь.

На следующем шаге рассмотрим cтандартное диалоговое окно настройки принтера.

Класс QFileDialog предоставляет диалоговое окно позволяющее пользователям выбирать файлы или директории.

Класс QFileDialog позволяет пользователю перемещаться по иерархическим уровням файловой системы для выбора одного или нескольких файлов (директорий).

Самым простым способом создать диалоговое окно QFileDialog является использование статических функций.

В приведенном примере модальный QFileDialog создается с помощью статической функции. Изначально диалоговое окно отображает содержимое указанной директории "C:/Users/Alexey" и отображает файлы соответствующие установленному фильтру (*.jpg *.jpg *.bmp).

Если требуется установить несколько фильтров, то каждый фильтр разделяется двойным символом точки с запятой ";", например:

QFileDialog можно создать без использования статических функций. Для того, чтобы указать что должен выбрать пользователь в диалоговом окне, следует воспользоваться методом setFileMode():

В приведенном примере режим выбора файлов установлен в AnyFile - что означает, что пользователь может выбрать любой файл и даже указать на несуществующий файл. Такой режим может быть полезен при создании диалогового окна "Сохранить как".

Список режимов выбора файл:

Константа Значение Описание
QFileDialog::AnyFile 0 Имя файла независимо от того существует файл или нет.
QFileDialog::ExistingFile 1 Имя одного существующего файла.
QFileDialog::Directory 2 Имя директории. Отображаются и файлы и директории. Однако, нативное окно Windows не поддерживает отображение файлов при выборе директории.
QFileDialog::ExistingFiles 3 Имена нескольких существующих файлов.
QFileDialog::DirectoryOnly 4 Использует для отображения режим Directory и включенную опцию ShowDirsOnly.

Методы

voidgetExistingDirectory ( QWidget parent = 0, string caption = NULL, string dir = NULL, Options options = ShowDirsOnly )
stringgetOpenFileName ( QWidget $parent = 0, string $caption = NULL, string $dir = NULL, string $filter = NULL, Options $options = NULL )
voidgetSaveFileName ( QWidget parent = 0, string caption = NULL, string dir = NULL, string filter = NULL, Options options = NULL )
voidsetFileMode ( FileMode mode )
voidsetNameFilter ( string filter )
voidsetViewMode ( ViewMode mode )

Описание методов

void QFileDialog:: getExistingDirectory ( QWidget parent = 0, string caption = NULL, string dir = NULL, Options options = ShowDirsOnly )

string QFileDialog:: getOpenFileName ( QWidget $parent = 0, string $caption = NULL, string $dir = NULL, string $filter = NULL, Options $options = NULL )

Открывает окно диалога выбора файла по установленному фильтру

void QFileDialog:: getSaveFileName ( QWidget parent = 0, string caption = NULL, string dir = NULL, string filter = NULL, Options options = NULL )


Согласно официальной документации, в общей сложности можно использовать 8 статических функций, например, статическую функцию getOpenFileName:


Здесь следует отметить, что верхом является QApplication, а не QCoreApplication. Результаты приведены ниже:


Таким образом, можно получить абсолютный путь к требуемому файлу, и файл может работать с QFile.

Давайте посмотрим, что могут делать эти 8 статических функций?

  • getExistingDirectoryПолучить только папки


getExistingDirectoryUrl
Подобно getExistingDirectory, функция также предназначена для получения пути к папке. Самое большое отличие состоит в том, что путь в параметре имеет тип QUrl, который предоставляет пользователям возможность выбирать удаленный каталог.

getOpenFileNameПолучить локальные файлы
Эта статическая функция была продемонстрирована в приведенном выше примере и не будет повторяться здесь.

getOpenFileUrlПолучить удаленные файлы
предоставляет пользователям возможность получать пути к удаленным файлам

getOpenFileUrlsПолучить несколько удаленных файлов
может получить несколько путей к удаленным файлам

getOpenFileNamesПолучить несколько локальных файлов

getSaveFileName сохранить локальный файл диалога

getSaveFileUrl Сохранить диалог удаленного файла

Второй вид: метод конструктора-пользовательские детали

Сначала создайте объект QFileDialog:

  • Укажите, открывать ли файл или сохранять диалог AcceptMode (2 перечисления)
  • Установите уровень детализации информации, отображаемой в диалоге (2 перечисления)

После установки нажмите ОК, диалоговое окно ничего не возвращает (4 перечисления)

За исключением того, что есть одна опция, не написанная выше, остальные являются свойствами. Давайте поговорим об открытых функциях ниже.





Фильтр QDir :: filter здесь не совпадает с фильтром в правом нижнем углу (* .txt) диалогового окна. Фильтр QDir :: filter имеет 16 перечислений, как показано ниже:

Constant Value Description
QDir::Dirs 0x001 Список каталогов, соответствующих фильтрам
QDir::AllDirs 0x400 Список всех каталогов
QDir::Files 0x002 Список всех файлов
QDir::Drives 0x004 Список дисков (игнорируется системами Unix)
QDir::NoSymLinks 0x008 Не перечислять символические ссылки
QDir::NoDotAndDotDot NoDot or NoDotDot Не перечисляйте специальные элементы, такие как "." Или ".."
QDir::NoDot 0x2000 Не перечислять "."
QDir::NoDotDot 0x4000 Не перечисляйте ".."
QDir::AllEntries Dirs\Files\Drives Список каталогов, дисков, символических ссылок
QDir::Readable 0x010 Список файлов с разрешением на чтение для программы. Читаемые значения должны взаимодействовать с папками и файлами
QDir::Writable 0x020 Список файлов с правами на запись для программы. Читаемые значения должны взаимодействовать с папками и файлами
QDir::Executable 0x040 Перечислите файлы, которые программа имеет разрешение на запуск. Читаемые значения должны взаимодействовать с папками и файлами
QDir::Modified 0x080 Список только измененных файлов (игнорируется системами Unix)
QDir::Hidden 0x100 Список скрытых файлов (системы Unix начинаются с ".")
QDir::System 0x200 Список системных файлов
QDir::CaseSensitive 0x800 Фильтры должны быть чувствительны к регистру


Если QDir :: filter не установлен, по умолчанию это:


Вернуться к поставщику иконок файлов
QFileIconProvider * QFileDialog::iconProvider() const
Это функция для значков, таких как файлы. Используйте эту функцию, чтобы узнать, кто предоставил эти значки. Конечно, значок системы также можно установить самостоятельно.

Возврат к комиссии
QAbstractItemDelegate * QFileDialog::itemDelegate() const
Возвращает делегата элементов списка. Эти делегаты используются для предоставления элементов в диалоговом представлении.


Текстовая метка в диалоге настроек
В диалоговом окне можно установить 5 текстовых меток, как показано ниже:



Вот пример. Я не знаю, почему другой контент не отображается. , , , Однако я попытался не устанавливать LoonIn вручную, и система вывода по умолчанию обнаружила, что результат, возвращаемый на моем компьютере с Windows 10, был "" пустым .

Фильтры файлов, которые возвращают типы MIME
QStringList QFileDialog::mimeTypeFilters() const

QFileDialog предоставляет диалоговое окно для выбора файлов или каталогов.

QFileDialog позволяет пользователям перемещаться по каталогам файловой системы для выбора файлов или каталогов.

Самый простой способ создать QFileDialog - использовать статические функции. Следующее:

В приведенном выше примере мы используем статическую функцию QFileDialog для созданияМодальный диалог. В исходном состоянии диалогового окна будет отображаться содержимое каталога «/ home», и будут отображаться только те файлы, которые соответствуют шаблону, определенному строкой «Файлы изображений (* .jpg * .jpg * .bmp)». Отец диалогового окна установлен на это, а заголовок окна - «Выберите изображение», как показано ниже:


Вы также можете создать файл QFileDialog без использования статических функций. Основное использование выглядит следующим образом

Часто используемые статические функции

Самый простой и удобный способ использовать QFileDialog - использовать его статические функции.Статические функции, поддерживаемые QFileDialog, следующие:

Название функции описание
QString getExistingDirectory Получить строку пути к существующей папке
QUrl getExistingDirectoryUrl Получить путь QUrl существующей папки. Отличие от вышесказанного в том, что он может получить удаленную папку.
QString getOpenFileName Получить строку пути к существующему файлу
QStringList getOpenFileNames Получить строку пути к нескольким существующим файлам
QUrl getOpenFileUrl Подобно getOpenFileName, разница в том, что он поддерживает удаленный выбор файлов.
QList<QUrl> getOpenFileNames Подобно getOpenFileNames, разница в том, что он поддерживает удаленный выбор файлов.
QString getSaveFileName Используется для возврата имени файла, файл не обязательно должен существовать
QUrl getSaveDirectoryUrl Используется для возврата файла QUrl, файл не должен существовать

Общие настройки

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

Настройки открытого режима

Есть два режима, как показано ниже:

постоянный ценить
QFileDialog::AcceptOpen 0
QFileDialog::AcceptSave 1

В первом режиме отображается диалоговое окно в виде открытия файла, а во втором режиме отображается диалоговое окно в виде сохранения файла.

Установить суффикс по умолчанию

Во многих IDE нам не нужно указывать суффикс файла при сохранении файла, потому что IDE автоматически добавит суффикс для нас, эта функция используется для достижения Суффикс добавляется автоматически функциональный.

Установить открытый каталог

Используется для установки каталога, отображаемого при появлении диалогового окна.

Установить режим файла

В файловом режиме диалогового окна пользователь может выбрать тип и количество элементов, а также можно установить следующие режимы:

постоянный ценить описание
QFileDialog::AnyFile 0 Вернуть имя файла, независимо от того, существует ли файл
QFileDialog::ExistingFile 1 Верните имя файла, файл должен существовать
QFileDialog::Directory 2 Вернитесь к имени каталога, файлы и каталоги будут отображаться, но в собственном диалоговом окне файлов Windows файлы не отображаются в этом режиме.
QFileDialog::ExistingFiles 3 0 или более существующих имен файлов

Способ настройки следующий:

Установить фильтр

Установив фильтры, мы можем указать, какие файлы должны отображаться. Вот конкретные варианты:

постоянный ценить описание
QDir::Dirs 0x001 Перечислите каталоги, соответствующие фильтру
QDir::AllDirs 0x400 Список всех каталогов
QDir::Files 0x002 Список файлов
QDir::Drives 0x004 Список дисководов (в Unix этот параметр игнорируется)
QDir::NoSymLinks 0x008 Не перечислять символические ссылки (системы, не поддерживающие символические ссылки, игнорируют этот элемент)
QDir::NoDotAndDotDot NoDot | NoDotDot Не указаны специальные элементы: «.» И «. »
QDir::NoDot 0x2000 Не указывайте специальные элементы: "."
QDir::NoDotDot 0x4000 Не указывайте специальные элементы: «. »
QDir::AllEntries Dirs | Files | Drives Список каталогов, файлов, дисков, символических ссылок
QDir::Readable 0x010 Список файлов, доступных для чтения текущему приложению
QDir::Writable 0x020 Список файлов, доступных для записи текущему приложению
QDir::Executable 0x040 Список файлов, которые могут быть выполнены текущим приложением
QDir::Modified 0x080 Список только файлов, которые были изменены
QDir::Hidden 0x100 Список скрытых файлов
QDir::System 0x200 Список системных файлов
QDir::CaseSensitive 0x800 Фильтр чувствителен к регистру

Способ использования следующий:

Установить режим сопоставления фильтров

Если строка фильтра содержит пару скобок, которые содержат один или несколько шаблонов подстановочных знаков имени файла, разделенных пробелами, в качестве фильтра будет использоваться только текст, содержащийся в скобках. Следовательно, два вышеуказанных метода записи эквивалентны.

Мы также можем установить несколько фильтров одновременно, как показано ниже:

Во многих IDE, когда мы открываем или создаем новый файл, IDE по умолчанию открывает каталог, который мы открывали в прошлый раз.Это функция, которую хочет выполнить запись истории. Способ использования следующий:

Установите список строк для диалогового окна файла для хранения истории просмотра.

Читайте также: