В нашем приложении, использующем Qt 4 и поддерживающем сенсорный ввод, мы используем QFileDialog с параметрами QFileDialog :: DontUseNativeDialog и QFileDialog :: ExistingFiles. Первое необходимо, потому что мы устанавливаем собственную таблицу стилей и не работаем с родным диалогом. Второй - для выбора нескольких файлов, что мы и хотим делать.QFileDialog: Как выбрать несколько файлов с сенсорным экраном?
Проблема заключается в том, что нельзя выбрать несколько файлов с сенсорным вводом в QFileDialog, потому что у нас нет доступных клавиш «shift» или «ctrl». В Windows проблема решена путем добавления флажков к элементам. QFileDialog не имеет флажков.
Я попытался манипулировать QFileDialog, чтобы он отображал флажки для элементов, но мне не удалось.
Я попытался обменять QFileSystemModel, который используется базовыми QTreeView и QListView, но это нарушает соединения сигнального слота между моделью и диалогом. Я не мог найти способ восстановить их, потому что они зашли глубоко в частные завещания диалога.
В настоящий момент единственное решение, которое я могу себе представить, это написать совершенно новый диалог, но я бы хотел избежать усилий.
- Итак, есть ли способ добавить флажки в представления модели QFileDialog?
- Есть ли у вас другая идея, как можно было бы выбрать несколько файлов?
- Является ли проблема исправлена в Qt 5? Мы все равно хотим обновить.
Благодарим за помощь.
Вы посмотрели на них? https://wiki.qt.io/QSortFilterProxyModel_subclass_to_add_a_checkbox http://www.qtcentre.org/threads/27253-QFileSystemModel-with-checkboxes – Miki
Возможно, хороший хак будет искать QListView/QTreeView внутри вашего QFileDialog (подсказка: 'findChild ') и установите его в режиме расширенного выбора. – peppe
Ссылка на CheckableProxyModel выглядит многообещающей, потому что кажется, что она не требует обмена модели с другой. Другая ссылка требует реализации производного QFileSystemModel, который заменит нормальный QFileSystemModel в представлениях. Но я попробовал это, и он сломал соединения сигнального слота между моделью и объектом QFileDialogPrivate QFileDialog, который я не смог восстановить извне. – Knitschi