Шаг 135.
Библиотека Qt.
Диалоговое окно выбора файлов

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

    Использование стандартных окон значительно ускоряет разработку тех приложений, в которых необходимо использовать диалоговые окна выбора файлов, шрифта, цвета и т. д. Вместо того чтобы тратить время на разработку своих собственных классов, можно воспользоваться готовыми классами библиотеки 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тандартное диалоговое окно настройки принтера.




Предыдущий шаг Содержание Следующий шаг