Наверное всё-таки имеется в виду "вход" в выбранную папку.
После некоторого исследования могу констатировать, что к сожалению легальными средствами сделать это не получится 

Т.е. double-click отрабатывает всегда.
Я тут покопался в исходниках немного, нашел следующий способ.
C++ (Qt)
/*!
2901	    \internal
2902	
2903	    This is called when the user double clicks on a file with the corresponding
2904	    model item \a index.
2905	*/
2906	void QFileDialogPrivate::_q_enterDirectory(const QModelIndex &index)
2907	{
2908	    Q_Q(QFileDialog);
2909	    // My Computer or a directory
2910	    QModelIndex sourceIndex = index.model() == proxyModel ? mapToSource(index) : index;
2911	    QString path = sourceIndex.data(QFileSystemModel::FilePathRole).toString();
2912	    if (path.isEmpty() || model->isDir(sourceIndex)) {
2913	        q->setDirectory(path);
2914	        emit q->directoryEntered(path);
2915	        if (fileMode == QFileDialog::Directory
2916	                || fileMode == QFileDialog::DirectoryOnly) {
2917	            // ### find out why you have to do both of these.
2918	            lineEdit()->setText(QString());
2919	            lineEdit()->clear();
2920	        }
2921	    } else {
2922	        q->accept();
2923	    }
2924	}
Прежде всего, коннектимся к сигналу currentChanged, где запоминаем имя выделенной директории и через SelectionModel получаем порядковый номер выделенного файла.
Еще нам нужно перехватить directoryEntered(QString), в котором будет сосредоточена основная работа. Проверяем, нужно ли нам открывать эту директорию. Если не нужно - оставляем пользователя в текущей директории: this->setDirectory(mOldPath), восстанавливаем ModelIndex и имя файла в lineEdit. Причем, чтобы обойти очистку lineEdit в исходниках (строка 2918-2919), подключим directoryEntered с режимом Qt::QueuedConnection.
Вот такой костыль получился. Вроде бы я пробежался по тексту QFileDialog, проблем с QueuedConnection быть не должно - там всего 2 вызова directoryEntered.
И все это в коде, может кому-нибудь пригодится:
C++ (Qt)
FileDialog::FileDialog(QWidget* parent, const QString& caption, const QString& directory, const QString& filter) :
    QFileDialog(parent, caption, directory, filter)
{
    this->connect(this, SIGNAL(directoryEntered(QString)),
                  this, SLOT(slotDirectoryEntered(QString)),
                  Qt::QueuedConnection);
    this->connect(this, SIGNAL(currentChanged(QString)),
                  this, SLOT(slotCurrentChanged(QString)));
 
    mPath = qApp->applicationDirPath();
 
    modelView = this->findChild<QListView*>("listView");
    lineEdit = this->findChild<QLineEdit*>();
}
 
 
int FileDialog::slotDirectoryEntered(QString path)
{
    QDir newDirectory(path);
 
    // Получение списка файлов и директорий в папке
    QStringList objects = newDirectory.entryList(QDir::AllDirs | QDir::NoDotAndDotDot);
 
    // Проверка элементов
    ...
 
    // Если заходить в директорию не нужно
    if (objects.size() == 0)
    {
        this->setDirectory(mPath);
 
        if (lineEdit && modelView)
        {
            modelView->setCurrentIndex(mModelIndex);
            lineEdit->setText(mSelectedFileName);
        }
    }
    else
    {
        mPath = path;
    }
 
    return 0;
}
 
 
int FileDialog::slotCurrentChanged(QString path)
{
    if (path.isEmpty())
        return 0;
 
    if (lineEdit && modelView)
    {
        mModelIndex = modelView->currentIndex();
        mSelectedFileName = QDir(path).dirName();
    }
 
    return 0;
}