Qt - okno dialogowe Open file

Stronę tą wyświetlono już: 16 razy

Okno dialogowe Open file jest jednym z częściej wykorzystywanych okien standardowych w programach z graficznym interfejsem użytkownika. Warto jest więc się zapoznać z możliwościami jego wywoływania. W tym celu konieczne jest załączenie pliku QFileDialog, w którym znajduje się klasa QFileDialog. Najprostszym sposobem wywołania okna Open file jest wykorzystanie statycznej metody getOpenFileName, która tworzy okno Open file a po jego zamknięciu zwraca nazwę zaznaczonego pliku. Oto przykładowy kod:

Listing 1
  1. QString filePath = QFileDialog::getOpenFileName(
  2. this, // wskaźnik na rodzica (może być 0, gdy rodzica nie ma)
  3. "Open image file", // Text belki tytułowej okna dialogowego
  4. QDir::homePath(), // ścieżka startowa
  5. "Graphics file (*.gif *.jpg *.jpeg *.png)" // filtr plików
  6. );

Czasami jednak zachodzi potrzeba udostępnienia możliwości zaznaczenia wielu plików, wtedy z pomocą przychodzi statyczna metoda getOpenFileNames, która dla odmiany zwraca obiekt klasy QStringList:

Listing 2
  1. QStringList filePaths = QFileDialog::getOpenFileNames(
  2. this, // wskaźnik na rodzica (może być 0, gdy rodzica nie ma)
  3. "Open image file", // Text belki tytułowej okna dialogowego
  4. QDir::homePath(), // ścieżka startowa
  5. "Graphics file (*.gif *.jpg *.jpeg *.png)" // filtr plików
  6. );

Czasami jednak takie uproszczone wywołanie tego okna dialogowego nie dostarcza odpowiedniej kontroli nad jego zachowaniem. Można wtedy utworzyć obiekt klasy QFileDialog:

Listing 3
  1. QFileDialog openFile(this);
  2. openFile.setFileMode(QFileDialog::AnyFile); // ta opcja sprawia, że użytkownik może zaznaczyć dowolny plik a nawet plik, który nie istnieje
  3. openFile.setNameFilter("Graphics file (*.gif *.jpg *.jpeg *.png)");
  4. QStringList fileNames;
  5. if(openFile.exec()){
  6. fileNames = openFile.selectedFiles();
  7. }

Jeżeli chodzi o filtrowanie plików, można utworzyć listę grup w następujący sposób:

Listing 4
  1. openFile.setNameFilter("Graphics file (*.gif *.jpg *.jpeg *.png);;GIF (*.gif);;JPG (*.jpg *.jpeg);;PNG (*.png)");

W rezultacie w oknie dialogowym Open file dostępna będzie rozwijana lista z poniższego rysunku.

Widok listy filtrów dostępnych w oknie Open file
Rys. 1
Widok listy filtrów dostępnych w oknie Open file po zastosowaniu filtru z powyższego kodu
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5/qfiledialog.html#getOpenFileName - opis klasy QFileDialog na stronie dokumentacji Qt

Komentarze