33QQuickPlatformFileDialog::QQuickPlatformFileDialog(QObject *parent)
35 qCDebug(lcQuickPlatformFileDialog) <<
"creating non-native Qt Quick FileDialog with parent" << parent;
41 auto qmlContext = ::qmlContext(parent);
43 qmlWarning(parent) <<
"No QQmlContext for QQuickPlatformFileDialog; can't create non-native FileDialog implementation";
47 const auto dialogQmlUrl = QUrl(QStringLiteral(
"qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/qml/FileDialog.qml"));
48 QQmlComponent fileDialogComponent(qmlContext->engine(), dialogQmlUrl, parent);
49 if (!fileDialogComponent.isReady()) {
50 qmlWarning(parent) <<
"Failed to load non-native FileDialog implementation:\n" << fileDialogComponent.errorString();
53 m_dialog = qobject_cast<QQuickFileDialogImpl*>(fileDialogComponent.create());
55 qmlWarning(parent) <<
"Failed to create an instance of the non-native FileDialog:\n" << fileDialogComponent.errorString();
59 m_dialog->setParent(
this);
61 connect(m_dialog, &QQuickDialog::accepted,
this, &QPlatformDialogHelper::accept);
62 connect(m_dialog, &QQuickDialog::rejected,
this, &QPlatformDialogHelper::reject);
64 connect(m_dialog, &QQuickFileDialogImpl::fileSelected,
this, &QQuickPlatformFileDialog::fileSelected);
73 connect(m_dialog, &QQuickFileDialogImpl::selectedFileChanged,
this, &QQuickPlatformFileDialog::currentChanged);
74 connect(m_dialog, &QQuickFileDialogImpl::currentFolderChanged,
this, &QQuickPlatformFileDialog::directoryEntered);
75 connect(m_dialog, &QQuickFileDialogImpl::filterSelected,
this, &QQuickPlatformFileDialog::filterSelected);
162bool QQuickPlatformFileDialog::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent)
164 qCDebug(lcQuickPlatformFileDialog) <<
"show called with flags" << flags <<
165 "modality" << modality <<
"parent" << parent;
172 auto quickWindow = qobject_cast<QQuickWindow*>(parent);
174 qmlInfo(
this->parent()) <<
"Parent window (" << parent <<
") of non-native dialog is not a QQuickWindow";
177 m_dialog->setParent(parent);
178 m_dialog->resetParentItem();
180 auto popupPrivate = QQuickPopupPrivate::get(m_dialog);
181 popupPrivate->getAnchors()->setCenterIn(m_dialog->parentItem());
183 QSharedPointer<QFileDialogOptions> options = QPlatformFileDialogHelper::options();
184 m_dialog->setTitle(options->windowTitle());
185 m_dialog->setOptions(options);
186 m_dialog->selectNameFilter(m_pendingNameFilter);
187 m_pendingNameFilter.clear();
188 m_dialog->setAcceptLabel(options->isLabelExplicitlySet(QFileDialogOptions::Accept)
189 ? options->labelText(QFileDialogOptions::Accept) : QString());
190 m_dialog->setRejectLabel(options->isLabelExplicitlySet(QFileDialogOptions::Reject)
191 ? options->labelText(QFileDialogOptions::Reject) : QString());
193 if (options->initiallySelectedFiles().isEmpty()) {
194 if (m_dialog->currentFolder().isEmpty()) {
196 qCDebug(lcQuickPlatformFileDialog) <<
"- calling setCurrentFolder(QDir()) on quick dialog" << parent;
197 m_dialog->setCurrentFolder(QUrl::fromLocalFile(QDir().absolutePath()));
200 m_dialog->setWindowModality(modality);