Диалоговое окно выбора файлов

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

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

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

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


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

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

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

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

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

   
Вызов метода 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");
      }
}

   
Файлы приложения можно взять Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий