#include "FileDirDialog.hpp" #include #include #include #include #include #include FileDirDialog::FileDirDialog(QWidget *parent) : QFileDialog(parent) { m_selectedFiles.clear(); this->setOption(QFileDialog::DontUseNativeDialog, true); this->setFileMode(QFileDialog::Directory); QList btns = this->findChildren(); for (int i = 0; i < btns.size(); ++i) { QString text = btns[i]->text(); if (text.toLower().contains("open") || text.toLower().contains("choose")) { m_btnOpen = btns[i]; break; } } if (!m_btnOpen) return; m_btnOpen->installEventFilter(this); m_btnOpen->disconnect(SIGNAL(clicked())); connect(m_btnOpen, SIGNAL(clicked()), this, SLOT(chooseClicked())); m_listView = findChild("listView"); if (m_listView) { m_listView->setSelectionMode(QAbstractItemView::ExtendedSelection); } m_treeView = findChild(); if (m_treeView) m_treeView->setSelectionMode(QAbstractItemView::ExtendedSelection); } bool FileDirDialog::eventFilter( QObject* watched, QEvent* event ) { QPushButton *btn = qobject_cast(watched); if (btn && !btn->isEnabled() && event->type()==QEvent::EnabledChange) btn->setEnabled(true); return QWidget::eventFilter(watched, event); } void FileDirDialog::chooseClicked() { QModelIndexList indexList = m_listView->selectionModel()->selectedIndexes(); foreach (QModelIndex index, indexList) if (index.column( )== 0) m_selectedFiles.append(this->directory().absolutePath() + "/" + index.data().toString()); QDialog::accept(); } QStringList FileDirDialog::selectedFiles() { return m_selectedFiles; }