На этом шаге рассмотрим стандартное диалоговое окно выбора файлов.
Использование стандартных окон значительно ускоряет разработку тех приложений, в которых необходимо использовать диалоговые окна выбора файлов, шрифта, цвета и т. д. Вместо того чтобы тратить время на разработку своих собственных классов, можно воспользоваться готовыми классами библиотеки Qt. К достоинствам стандартных диалоговых окон можно отнести и целостность пользовательского интерфейса, т. к. вид окон во всех приложениях, их использующих, будет один и тот же.
Диалоговое окно выбора файлов предназначено для выбора одного или нескольких файлов, а также файлов, находящихся на удаленном компьютере, и поддерживает возможность переименования файлов и создания каталогов.
Класс QFileDialog предоставляет реализацию диалогового окна выбора файлов (рис. 1) и отвечает за создание и работоспособность сразу трех диалоговых окон. Одно из них позволяет осуществлять выбор файла для откры-тия, второе предназначено для выбора пути и имени файла для его сохранения, а третье — для выбора каталога.
Рис.1. Диалоговое окно выбора файлов
Класс QFileDialog унаследован от класса QDialog. Его определение находится в файле QFileDialog.
Этот класс предоставляет следующие статические методы:
Первым параметром этих методов является указатель на объект-предок, вторым передается текст заголовка окна, третьим — строка, представляющая собой рабочий каталог.
Вызов метода getOpenFileName() запустит диалоговое окно открытия файла (см. рис. 1). Четвертый параметр, передаваемый в этот метод, представляет собой фильтр (или маску), задающий расширение файлов. Например:
QString str = QFileDialog::getOpenFileName(0, "Открыть", "", "*.cpp *.h");
Покажем, как можно использовать статический метод getSaveFileName(), предназначенный для диалогового окна записи файла.
//Создаем объект растрового изображения размером 320x200 пикселов (объект pix) QPixmap pix(320, 200); //Создаем объект строкового типа strFormat, в эту строку будет помещен //выбранный пользователем при помощи диалогового окна формат. QString strFilter="*.jpg"; //Вызываем диалоговое окно при помощи статического метода getSaveFileName(). //В этот метод мы передаем: нулевой указатель на объект предка, //надпись самого окна "Сохранить изображение", //имя для файла с указанием папки "D:\\_Qt\\Qt\\images\\Image1", //строку с тремя графическими форматами, разделенными между собой двумя //символами точка с запятой ;;, для того чтобы каждый из них был //представлен отдельным элементом. //Последним передается адрес нашей строки, т. е. куда будет помещен //выбранный пользователем формат (объект strFilter) QString str = QFileDialog::getSaveFileName(0, "Сохранить изображение", "D:\\_Qt\\Qt\\images\\Image1", "*.png ;; *.jpg ;; *.bmp", &strFilter ); //После закрытия диалогового окна мы проверяем //строку str на содержимое, и если оно есть, то if (!str.isEmpty()) { //проверяем строку strFilter при помощи метода QString::contains() //на содержание одного из обозначений графического формата if (strFilter.contains("jpg")) { str=str+ ".jpg"; //Растровое изображение записывается вызовом метода QPixmap::save() pix.save(str, "JPG"); } else if (strFilter.contains("bmp")) { str=str+".bmp"; pix.save(str, "BMP"); } else { str=str+".png"; pix.save(str, "PNG"); } }
Файлы приложения можно взять здесь.
При помощи метода getExistingDirectory() можно предоставить пользователю возможность выбора каталога (рис. 2). Например:
QString str = QFileDialog::getExistingDirectory(0, "Выбор папки", "");
Рис.2. Диалоговое окно выбора папки
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим cтандартное диалоговое окно настройки принтера.