2

我想构建一个类似于QFileDialog::getExistingDirectory()的对话框,仅当所选目录包含某些文件时才启用 OK 按钮。

我知道我不能用QFileDialog来实现这一点,而是我必须想出我自己的 QDialog ,它有一个QTreeView耦合到一个QFileSystemModel

  1. 如何将QTreeView限制为目录?
  2. 如何获取当前选择的目录,以便检查它是否包含一些文件名?
4

1 回答 1

3
  1. 在 QFileSystemModel 上使用setFilter和 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
    }
}
于 2010-07-20T14:31:53.250 回答