QFileDialog для каталогов с определенным содержимым - PullRequest
2 голосов
/ 20 июля 2010

Я хотел бы создать диалоговое окно, подобное QFileDialog :: getExistingDirectory () , для которого кнопка ОК активна только в том случае, если выбранный каталог содержит определенные файлы.

Я знаю, что не могу достичь этого с помощью QFileDialog , вместо этого мне придется создать свой собственный QDialog, у которого QTreeView связан с QFileSystemModel .

  1. Как я могу ограничить QTreeView каталогами?
  2. Как я могу получить выбранный в данный момент каталог, чтобы я мог проверить, содержит ли он некоторые имена файлов?

1 Ответ

3 голосов
/ 20 июля 2010
  1. Используйте setFilter в QFileSystemModel с опцией QDir :: AllDirs или QDir :: Dirs, возможно, первой.
  2. подключите активированный (QModelIndex) сигнал из древовидной структуры к вашему собственному слоту. В этом слоте передайте QModelIndex методу fileInfo / filePath модели, чтобы получить информацию / путь для выбранного каталога, затем выполните проверку

Вот пример:

void slotDirectorySelected( const QModelIndex & index )
{
    QFileInfo info = fileSystemModel->fileInfo( index );
    QDir selectedDir = info.dir();
    foreach( const QString entry, selectedDir.entryList() ) {
        // do something with the entry
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...