diff options
-rw-r--r-- | src/controls/MenuBar.qml | 2 | ||||
-rw-r--r-- | src/controls/Private/MenuContentItem.qml | 6 | ||||
-rw-r--r-- | src/controls/TreeView.qml | 34 | ||||
-rw-r--r-- | src/controls/doc/src/qtquickcontrols-tableview.qdoc | 1 | ||||
-rw-r--r-- | src/controls/doc/src/qtquickcontrols-treeview.qdoc | 1 | ||||
-rw-r--r-- | src/controls/qquickmenupopupwindow.cpp | 7 | ||||
-rw-r--r-- | src/controls/qquickmenupopupwindow_p.h | 1 | ||||
-rw-r--r-- | src/controls/qquickpopupwindow.cpp | 1 | ||||
-rw-r--r-- | src/dialogs/DefaultFileDialog.qml | 44 | ||||
-rw-r--r-- | src/dialogs/qquickabstractdialog.cpp | 8 | ||||
-rw-r--r-- | src/dialogs/qquickabstractdialog_p.h | 4 | ||||
-rw-r--r-- | src/dialogs/qquickabstractfiledialog.cpp | 82 | ||||
-rw-r--r-- | src/dialogs/qquickabstractfiledialog_p.h | 14 | ||||
-rw-r--r-- | src/dialogs/qquickfiledialog.cpp | 86 | ||||
-rw-r--r-- | src/dialogs/qquickfiledialog_p.h | 17 | ||||
-rw-r--r-- | tests/manual/viewinqwidget/main.cpp | 47 | ||||
-rw-r--r-- | tests/manual/viewinqwidget/main.qml | 5 | ||||
-rw-r--r-- | tests/manual/viewinqwidget/viewinqwidget.pro | 7 |
18 files changed, 227 insertions, 140 deletions
diff --git a/src/controls/MenuBar.qml b/src/controls/MenuBar.qml index f2f0065b..a98d0e81 100644 --- a/src/controls/MenuBar.qml +++ b/src/controls/MenuBar.qml @@ -250,6 +250,8 @@ MenuBarPrivate { } } + Keys.forwardTo: d.openedMenuIndex !== -1 ? [root.menus[d.openedMenuIndex].__contentItem] : [] + Row { id: row x: d.style ? d.style.padding.left : 0 diff --git a/src/controls/Private/MenuContentItem.qml b/src/controls/Private/MenuContentItem.qml index 08bcf08b..fe8e7726 100644 --- a/src/controls/Private/MenuContentItem.qml +++ b/src/controls/Private/MenuContentItem.qml @@ -141,9 +141,13 @@ Loader { Keys.onRightPressed: { var item = content.menuItemAt(__menu.__currentIndex) - if ((event.accepted = (item && item.styleData.type === MenuItemType.Menu))) { + if (item && item.styleData.type === MenuItemType.Menu + && !item.__menuItem.__popupVisible) { item.__showSubMenu(true) item.__menuItem.__currentIndex = 0 + event.accepted = true + } else { + event.accepted = false } } diff --git a/src/controls/TreeView.qml b/src/controls/TreeView.qml index 6be217c5..49b88486 100644 --- a/src/controls/TreeView.qml +++ b/src/controls/TreeView.qml @@ -124,6 +124,7 @@ BasicTableView { property var clickedIndex: undefined property var pressedIndex: undefined + property bool selectOnRelease: false property int pressedColumn: -1 readonly property alias currentRow: root.__currentRow readonly property alias currentIndex: root.currentIndex @@ -240,22 +241,37 @@ BasicTableView { var pressedRow = __listView.indexAt(0, mouseY + __listView.contentY) pressedIndex = modelAdaptor.mapRowToModelIndex(pressedRow) pressedColumn = __listView.columnAt(mouseX) + selectOnRelease = false __listView.forceActiveFocus() - if (pressedRow > -1 && !Settings.hasTouchScreen - && !branchDecorationContains(mouse.x, mouse.y)) { - __listView.currentIndex = pressedRow - if (!clickedIndex) - clickedIndex = pressedIndex - mouseSelect(pressedIndex, mouse.modifiers, false) - if (!mouse.modifiers) - clickedIndex = pressedIndex + if (pressedRow === -1 + || Settings.hasTouchScreen + || branchDecorationContains(mouse.x, mouse.y)) { + return + } + if (selectionMode === SelectionMode.ExtendedSelection + && selection.isSelected(pressedIndex)) { + selectOnRelease = true + return } + __listView.currentIndex = pressedRow + if (!clickedIndex) + clickedIndex = pressedIndex + mouseSelect(pressedIndex, mouse.modifiers, false) + if (!mouse.modifiers) + clickedIndex = pressedIndex } onReleased: { + if (selectOnRelease) { + var releasedRow = __listView.indexAt(0, mouseY + __listView.contentY) + var releasedIndex = modelAdaptor.mapRowToModelIndex(releasedRow) + if (releasedRow >= 0 && releasedIndex === pressedIndex) + mouseSelect(pressedIndex, mouse.modifiers, false) + } pressedIndex = undefined pressedColumn = -1 autoScroll = 0 + selectOnRelease = false } onPositionChanged: { @@ -286,12 +302,14 @@ BasicTableView { onExited: { pressedIndex = undefined pressedColumn = -1 + selectOnRelease = false } onCanceled: { pressedIndex = undefined pressedColumn = -1 autoScroll = 0 + selectOnRelease = false } onClicked: { diff --git a/src/controls/doc/src/qtquickcontrols-tableview.qdoc b/src/controls/doc/src/qtquickcontrols-tableview.qdoc index d4649dc5..98c7ca7b 100644 --- a/src/controls/doc/src/qtquickcontrols-tableview.qdoc +++ b/src/controls/doc/src/qtquickcontrols-tableview.qdoc @@ -288,6 +288,7 @@ */ /*! + \qmlpropertygroup TableView::section \qmlproperty string TableView::section.property \qmlproperty enumeration TableView::section.criteria \qmlproperty Component TableView::section.delegate diff --git a/src/controls/doc/src/qtquickcontrols-treeview.qdoc b/src/controls/doc/src/qtquickcontrols-treeview.qdoc index 593ba99d..4fe92d9c 100644 --- a/src/controls/doc/src/qtquickcontrols-treeview.qdoc +++ b/src/controls/doc/src/qtquickcontrols-treeview.qdoc @@ -125,6 +125,7 @@ */ /*! + \qmlpropertygroup TreeView::section \qmlproperty string TreeView::section.property \qmlproperty enumeration TreeView::section.criteria \qmlproperty Component TreeView::section.delegate diff --git a/src/controls/qquickmenupopupwindow.cpp b/src/controls/qquickmenupopupwindow.cpp index 95100337..960de23d 100644 --- a/src/controls/qquickmenupopupwindow.cpp +++ b/src/controls/qquickmenupopupwindow.cpp @@ -151,6 +151,13 @@ void QQuickMenuPopupWindow::updatePosition() setGeometry(newPos.x(), newPos.y(), width(), height()); } +void QQuickMenuPopupWindow::focusInEvent(QFocusEvent *e) +{ + QQuickWindow::focusInEvent(e); + if (m_menu && m_menu->menuContentItem()) + m_menu->menuContentItem()->forceActiveFocus(); +} + void QQuickMenuPopupWindow::exposeEvent(QExposeEvent *e) { // the popup will reposition at the last moment, so its diff --git a/src/controls/qquickmenupopupwindow_p.h b/src/controls/qquickmenupopupwindow_p.h index de3509b3..adcfc6bb 100644 --- a/src/controls/qquickmenupopupwindow_p.h +++ b/src/controls/qquickmenupopupwindow_p.h @@ -71,6 +71,7 @@ Q_SIGNALS: void willBeDeletedLater(); protected: + void focusInEvent(QFocusEvent *); void exposeEvent(QExposeEvent *); bool shouldForwardEventAfterDismiss(QMouseEvent *) const; diff --git a/src/controls/qquickpopupwindow.cpp b/src/controls/qquickpopupwindow.cpp index 83955c48..defac701 100644 --- a/src/controls/qquickpopupwindow.cpp +++ b/src/controls/qquickpopupwindow.cpp @@ -70,7 +70,6 @@ void QQuickPopupWindow::show() if (QWindow *tp = transientParent()) { if (m_parentItem) { QPointF pos = m_parentItem->mapToItem(m_parentItem->window()->contentItem(), QPointF(posx, posy)); - pos += tp->mapFromGlobal(m_parentItem->window()->mapToGlobal(QPoint())); posx = pos.x(); posy = pos.y(); } diff --git a/src/dialogs/DefaultFileDialog.qml b/src/dialogs/DefaultFileDialog.qml index 05232268..cc663ccb 100644 --- a/src/dialogs/DefaultFileDialog.qml +++ b/src/dialogs/DefaultFileDialog.qml @@ -51,10 +51,39 @@ import "qml" AbstractFileDialog { id: root - folder: view.model.folder + Component { + id: modelComponent + FolderListModel { + showFiles: !root.selectFolder + nameFilters: root.selectedNameFilterExtensions + sortField: (view.sortIndicatorColumn === 0 ? FolderListModel.Name : + (view.sortIndicatorColumn === 1 ? FolderListModel.Type : + (view.sortIndicatorColumn === 2 ? FolderListModel.Size : FolderListModel.LastModified))) + sortReversed: view.sortIndicatorOrder === Qt.DescendingOrder + } + } onVisibleChanged: { if (visible) { + // If the TableView doesn't have a model yet, create it asynchronously to avoid a UI freeze + if (!view.model) { + var incubator = modelComponent.incubateObject(null, { }) + function init(model) { + view.model = model + model.nameFilters = root.selectedNameFilterExtensions + root.folder = model.folder + } + + if (incubator.status === Component.Ready) { + init(incubator.object) + } else { + incubator.onStatusChanged = function(status) { + if (status === Component.Ready) + init(incubator.object) + } + } + } + view.needsWidthAdjustment = true view.selection.clear() view.focus = true @@ -62,7 +91,6 @@ AbstractFileDialog { } Component.onCompleted: { - view.model.nameFilters = root.selectedNameFilterExtensions filterField.currentIndex = root.selectedNameFilterIndex root.favoriteFolders = settings.favoriteFolders } @@ -303,14 +331,7 @@ AbstractFileDialog { resizeColumnsToContents() needsWidthAdjustment = false } - model: FolderListModel { - showFiles: !root.selectFolder - nameFilters: root.selectedNameFilterExtensions - sortField: (view.sortIndicatorColumn === 0 ? FolderListModel.Name : - (view.sortIndicatorColumn === 1 ? FolderListModel.Type : - (view.sortIndicatorColumn === 2 ? FolderListModel.Size : FolderListModel.LastModified))) - sortReversed: view.sortIndicatorOrder === Qt.DescendingOrder - } + model: null onActivated: if (view.focus) { if (view.selection.count > 0 && view.model.isFolder(row)) { @@ -438,7 +459,8 @@ AbstractFileDialog { anchors.verticalCenter: parent.verticalCenter onCurrentTextChanged: { root.selectNameFilter(currentText) - view.model.nameFilters = root.selectedNameFilterExtensions + if (view.model) + view.model.nameFilters = root.selectedNameFilterExtensions } } Button { diff --git a/src/dialogs/qquickabstractdialog.cpp b/src/dialogs/qquickabstractdialog.cpp index 53bdef8c..afc27b77 100644 --- a/src/dialogs/qquickabstractdialog.cpp +++ b/src/dialogs/qquickabstractdialog.cpp @@ -192,7 +192,7 @@ void QQuickAbstractDialog::setVisible(bool v) } } if (m_windowDecoration) { - m_windowDecoration->setProperty("dismissOnOuterClick", (m_modality == Qt::NonModal)); + setDecorationDismissBehavior(); m_windowDecoration->setVisible(v); } else if (m_dialogWindow) { if (v) { @@ -223,6 +223,7 @@ void QQuickAbstractDialog::decorationLoaded() QVariant contentVariant; contentVariant.setValue<QQuickItem*>(m_contentItem); m_windowDecoration->setProperty("content", contentVariant); + setDecorationDismissBehavior(); connect(m_windowDecoration, SIGNAL(dismissed()), this, SLOT(reject())); ok = true; qCDebug(lcWindow) << "using synthetic window decoration" << m_windowDecoration << "from" << m_decorationComponent->url(); @@ -312,6 +313,11 @@ QQuickWindow *QQuickAbstractDialog::parentWindow() return m_parentWindow; } +void QQuickAbstractDialog::setDecorationDismissBehavior() +{ + m_windowDecoration->setProperty("dismissOnOuterClick", (m_modality == Qt::NonModal)); +} + void QQuickAbstractDialog::setContentItem(QQuickItem *obj) { m_contentItem = obj; diff --git a/src/dialogs/qquickabstractdialog_p.h b/src/dialogs/qquickabstractdialog_p.h index da012e28..0a761bf3 100644 --- a/src/dialogs/qquickabstractdialog_p.h +++ b/src/dialogs/qquickabstractdialog_p.h @@ -155,7 +155,9 @@ protected: bool m_visible; Qt::WindowModality m_modality; -protected: // variables for pure-QML implementations only +protected: // variables and methods for pure-QML implementations only + void setDecorationDismissBehavior(); + QQuickItem *m_contentItem; QWindow *m_dialogWindow; QQuickItem *m_windowDecoration; diff --git a/src/dialogs/qquickabstractfiledialog.cpp b/src/dialogs/qquickabstractfiledialog.cpp index 3a0d4229..3bc79570 100644 --- a/src/dialogs/qquickabstractfiledialog.cpp +++ b/src/dialogs/qquickabstractfiledialog.cpp @@ -41,9 +41,10 @@ #include "qquickitem.h" #include <private/qguiapplication_p.h> +#include <QQmlEngine> +#include <QQuickWindow> #include <QRegularExpression> #include <QWindow> -#include <QQuickWindow> QT_BEGIN_NAMESPACE @@ -224,4 +225,83 @@ void QQuickAbstractFileDialog::updateModes() emit fileModeChanged(); } +void QQuickAbstractFileDialog::addShortcut(const QString &name, const QString &visibleName, const QString &path) +{ + QQmlEngine *engine = qmlEngine(this); + QUrl url = QUrl::fromLocalFile(path); + + // Since the app can have bindings to the shortcut, we always add it + // to the public API, even if the directory doesn't (yet) exist. + m_shortcuts.setProperty(name, url.toString()); + + // ...but we are more strict about showing it as a clickable link inside the dialog + if (visibleName.isEmpty() || !QDir(path).exists()) + return; + + QJSValue o = engine->newObject(); + o.setProperty("name", visibleName); + // TODO maybe some day QJSValue could directly store a QUrl + o.setProperty("url", url.toString()); + + int length = m_shortcutDetails.property(QLatin1String("length")).toInt(); + m_shortcutDetails.setProperty(length, o); +} + +void QQuickAbstractFileDialog::addShortcutFromStandardLocation(const QString &name, QStandardPaths::StandardLocation loc, bool local) +{ + if (m_selectExisting) { + QStringList readPaths = QStandardPaths::standardLocations(loc); + QString path = readPaths.isEmpty() ? QString() : local ? readPaths.first() : readPaths.last(); + addShortcut(name, QStandardPaths::displayName(loc), path); + } else { + QString path = QStandardPaths::writableLocation(loc); + addShortcut(name, QStandardPaths::displayName(loc), path); + } +} + +void QQuickAbstractFileDialog::populateShortcuts() +{ + QJSEngine *engine = qmlEngine(this); + m_shortcutDetails = engine->newArray(); + m_shortcuts = engine->newObject(); + + addShortcutFromStandardLocation(QLatin1String("desktop"), QStandardPaths::DesktopLocation); + addShortcutFromStandardLocation(QLatin1String("documents"), QStandardPaths::DocumentsLocation); + addShortcutFromStandardLocation(QLatin1String("music"), QStandardPaths::MusicLocation); + addShortcutFromStandardLocation(QLatin1String("movies"), QStandardPaths::MoviesLocation); + addShortcutFromStandardLocation(QLatin1String("home"), QStandardPaths::HomeLocation); + +#ifndef Q_OS_IOS + addShortcutFromStandardLocation(QLatin1String("pictures"), QStandardPaths::PicturesLocation); +#else + // On iOS we point pictures to the system picture folder when loading + addShortcutFromStandardLocation(QLatin1String("pictures"), QStandardPaths::PicturesLocation, !m_selectExisting); +#endif + +#ifndef Q_OS_IOS + // on iOS, this returns only "/", which is never a useful path to read or write anything + const QFileInfoList drives = QDir::drives(); + for (const QFileInfo &fi : drives) + addShortcut(fi.absoluteFilePath(), fi.absoluteFilePath(), fi.absoluteFilePath()); +#endif + + emit shortcutsChanged(); +} + +QJSValue QQuickAbstractFileDialog::shortcuts() +{ + if (m_shortcuts.isUndefined()) + populateShortcuts(); + + return m_shortcuts; +} + +QJSValue QQuickAbstractFileDialog::__shortcuts() +{ + if (m_shortcutDetails.isUndefined()) + populateShortcuts(); + + return m_shortcutDetails; +} + QT_END_NAMESPACE diff --git a/src/dialogs/qquickabstractfiledialog_p.h b/src/dialogs/qquickabstractfiledialog_p.h index c43865ed..370a31cc 100644 --- a/src/dialogs/qquickabstractfiledialog_p.h +++ b/src/dialogs/qquickabstractfiledialog_p.h @@ -51,6 +51,8 @@ // We mean it. // +#include <QJSValue> +#include <QStandardPaths> #include <QQuickView> #include <QtGui/qpa/qplatformdialoghelper.h> #include <qpa/qplatformtheme.h> @@ -72,6 +74,8 @@ class QQuickAbstractFileDialog : public QQuickAbstractDialog Q_PROPERTY(QUrl fileUrl READ fileUrl NOTIFY selectionAccepted) Q_PROPERTY(QList<QUrl> fileUrls READ fileUrls NOTIFY selectionAccepted) Q_PROPERTY(bool sidebarVisible READ sidebarVisible WRITE setSidebarVisible NOTIFY sidebarVisibleChanged) + Q_PROPERTY(QJSValue shortcuts READ shortcuts NOTIFY shortcutsChanged) // map of QStandardDirectory names to QUrls + Q_PROPERTY(QJSValue __shortcuts READ __shortcuts NOTIFY shortcutsChanged) // map of details for QML dialog implementations public: QQuickAbstractFileDialog(QObject *parent = 0); @@ -89,6 +93,8 @@ public: QUrl fileUrl() const; virtual QList<QUrl> fileUrls() const = 0; bool sidebarVisible() const { return m_sidebarVisible; } + QJSValue shortcuts(); + QJSValue __shortcuts(); public Q_SLOTS: void setVisible(bool v); @@ -109,13 +115,19 @@ Q_SIGNALS: void fileModeChanged(); void selectionAccepted(); void sidebarVisibleChanged(); + void shortcutsChanged(); protected: - virtual void updateModes(); + void updateModes(); + void addShortcut(const QString &name, const QString &visibleName, const QString &path); + void addShortcutFromStandardLocation(const QString &name, QStandardPaths::StandardLocation loc, bool local = true); + void populateShortcuts(); protected: QPlatformFileDialogHelper *m_dlgHelper; QSharedPointer<QFileDialogOptions> m_options; + QJSValue m_shortcuts; + QJSValue m_shortcutDetails; bool m_selectExisting; bool m_selectMultiple; bool m_selectFolder; diff --git a/src/dialogs/qquickfiledialog.cpp b/src/dialogs/qquickfiledialog.cpp index 66e8f389..263b4988 100644 --- a/src/dialogs/qquickfiledialog.cpp +++ b/src/dialogs/qquickfiledialog.cpp @@ -42,7 +42,6 @@ #include <QQmlEngine> #include <QJSValueIterator> #include <private/qguiapplication_p.h> -#include <private/qv4object_p.h> QT_BEGIN_NAMESPACE @@ -119,91 +118,6 @@ QList<QUrl> QQuickFileDialog::fileUrls() const return m_selections; } -void QQuickFileDialog::addShortcut(const QString &name, const QString &visibleName, const QString &path) -{ - QJSEngine *engine = qmlEngine(this); - QUrl url = QUrl::fromLocalFile(path); - - // Since the app can have bindings to the shortcut, we always add it - // to the public API, even if the directory doesn't (yet) exist. - m_shortcuts.setProperty(name, url.toString()); - - // ...but we are more strict about showing it as a clickable link inside the dialog - if (visibleName.isEmpty() || !QDir(path).exists()) - return; - - QJSValue o = engine->newObject(); - o.setProperty("name", visibleName); - // TODO maybe some day QJSValue could directly store a QUrl - o.setProperty("url", url.toString()); - - int length = m_shortcutDetails.property(QLatin1String("length")).toInt(); - m_shortcutDetails.setProperty(length, o); -} - -void QQuickFileDialog::addShortcutFromStandardLocation(const QString &name, QStandardPaths::StandardLocation loc, bool local) -{ - if (m_selectExisting) { - QStringList readPaths = QStandardPaths::standardLocations(loc); - QString path = readPaths.isEmpty() ? QString() : local ? readPaths.first() : readPaths.last(); - addShortcut(name, QStandardPaths::displayName(loc), path); - } else { - QString path = QStandardPaths::writableLocation(loc); - addShortcut(name, QStandardPaths::displayName(loc), path); - } -} - -void QQuickFileDialog::populateShortcuts() -{ - QJSEngine *engine = qmlEngine(this); - m_shortcutDetails = engine->newArray(); - m_shortcuts = engine->newObject(); - - addShortcutFromStandardLocation(QLatin1String("desktop"), QStandardPaths::DesktopLocation); - addShortcutFromStandardLocation(QLatin1String("documents"), QStandardPaths::DocumentsLocation); - addShortcutFromStandardLocation(QLatin1String("music"), QStandardPaths::MusicLocation); - addShortcutFromStandardLocation(QLatin1String("movies"), QStandardPaths::MoviesLocation); - addShortcutFromStandardLocation(QLatin1String("home"), QStandardPaths::HomeLocation); - -#ifndef Q_OS_IOS - addShortcutFromStandardLocation(QLatin1String("pictures"), QStandardPaths::PicturesLocation); -#else - // On iOS we point pictures to the system picture folder when loading - addShortcutFromStandardLocation(QLatin1String("pictures"), QStandardPaths::PicturesLocation, !m_selectExisting); -#endif - -#ifndef Q_OS_IOS - // on iOS, this returns only "/", which is never a useful path to read or write anything - const QFileInfoList drives = QDir::drives(); - for (const QFileInfo &fi : drives) - addShortcut(fi.absoluteFilePath(), fi.absoluteFilePath(), fi.absoluteFilePath()); -#endif - - emit shortcutsChanged(); -} - -void QQuickFileDialog::updateModes() -{ - QQuickAbstractFileDialog::updateModes(); - populateShortcuts(); -} - -QJSValue QQuickFileDialog::shortcuts() -{ - if (m_shortcuts.isUndefined()) - populateShortcuts(); - - return m_shortcuts; -} - -QJSValue QQuickFileDialog::__shortcuts() -{ - if (m_shortcutDetails.isUndefined()) - populateShortcuts(); - - return m_shortcutDetails; -} - /*! \qmlproperty bool AbstractFileDialog::visible diff --git a/src/dialogs/qquickfiledialog_p.h b/src/dialogs/qquickfiledialog_p.h index 630ea4a8..5614e939 100644 --- a/src/dialogs/qquickfiledialog_p.h +++ b/src/dialogs/qquickfiledialog_p.h @@ -52,8 +52,6 @@ // #include "qquickabstractfiledialog_p.h" -#include <QJSValue> -#include <QStandardPaths> QT_BEGIN_NAMESPACE @@ -61,8 +59,6 @@ class QQuickFileDialog : public QQuickAbstractFileDialog { Q_OBJECT Q_PROPERTY(QQuickItem* contentItem READ contentItem WRITE setContentItem DESIGNABLE false) - Q_PROPERTY(QJSValue shortcuts READ shortcuts NOTIFY shortcutsChanged) // map of QStandardDirectory names to QUrls - Q_PROPERTY(QJSValue __shortcuts READ __shortcuts NOTIFY shortcutsChanged) // map of details for QML dialog implementations Q_CLASSINFO("DefaultProperty", "contentItem") // AbstractFileDialog in QML can have only one child public: @@ -70,12 +66,6 @@ public: ~QQuickFileDialog(); virtual QList<QUrl> fileUrls() const Q_DECL_OVERRIDE; - QJSValue shortcuts(); - QJSValue __shortcuts(); - -Q_SIGNALS: - void shortcutsChanged(); - public Q_SLOTS: void clearSelection(); bool addSelection(const QUrl &path); @@ -86,17 +76,10 @@ protected: Q_INVOKABLE QUrl pathToUrl(const QString &path) { return QUrl::fromLocalFile(path); } Q_INVOKABLE QUrl pathFolder(const QString &path); - void addShortcut(const QString &name, const QString &visibleName, const QString &path); - void addShortcutFromStandardLocation(const QString &name, QStandardPaths::StandardLocation loc, bool local = true); - void populateShortcuts(); - void updateModes() Q_DECL_OVERRIDE; - private: QList<QUrl> m_selections; Q_DISABLE_COPY(QQuickFileDialog) - QJSValue m_shortcuts; - QJSValue m_shortcutDetails; }; QT_END_NAMESPACE diff --git a/tests/manual/viewinqwidget/main.cpp b/tests/manual/viewinqwidget/main.cpp index 0dec4080..dade5e61 100644 --- a/tests/manual/viewinqwidget/main.cpp +++ b/tests/manual/viewinqwidget/main.cpp @@ -27,19 +27,56 @@ ****************************************************************************/ #include <QApplication> +#include <QHBoxLayout> +#include <QVBoxLayout> +#include <QDebug> +#include <QDesktopWidget> +#include <QGroupBox> +#include <QQmlError> #include <QQuickView> -#include <QWidget> +#include <QQuickWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); - QQuickView *view = new QQuickView; QWidget widget; - QWidget *container = QWidget::createWindowContainer(view, &widget); - container->setGeometry(100,100,300,300); + widget.setWindowTitle(QT_VERSION_STR); + + const QUrl source(QUrl::fromLocalFile(QLatin1String(SRCDIR) + QStringLiteral("/main.qml"))); + + QHBoxLayout *hLayout = new QHBoxLayout(&widget); + QGroupBox *groupBox = new QGroupBox("QuickWidget", &widget); + QVBoxLayout *vLayout = new QVBoxLayout(groupBox); + QQuickWidget *quickWidget = new QQuickWidget(groupBox); + quickWidget->setMinimumSize(200, 200); + vLayout->addWidget(quickWidget); + quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView); + quickWidget->setSource(source); + if (quickWidget->status() == QQuickWidget::Error) { + qWarning() << quickWidget->errors(); + return 1; + } + hLayout->addWidget(groupBox); + + groupBox = new QGroupBox("QQuickView/createWindowContainer", &widget); + vLayout = new QVBoxLayout(groupBox); + QQuickView *view = new QQuickView; + view->setSource(source); + if (view->status() == QQuickView::Error) { + qWarning() << view->errors(); + return 1; + } + + view->setResizeMode(QQuickView::SizeRootObjectToView); + QWidget *container = QWidget::createWindowContainer(view, groupBox); + container->setMinimumSize(200, 200); + vLayout->addWidget(container); + hLayout->addWidget(groupBox); + + const QRect availableGeometry = QApplication::desktop()->availableGeometry(&widget); + widget.move(availableGeometry.center() - QPoint(widget.sizeHint().width() / 2, widget.sizeHint().height() / 2)); - view->setSource(QUrl(QStringLiteral("main.qml"))); widget.show(); return app.exec(); diff --git a/tests/manual/viewinqwidget/main.qml b/tests/manual/viewinqwidget/main.qml index ab3dc948..36c09b50 100644 --- a/tests/manual/viewinqwidget/main.qml +++ b/tests/manual/viewinqwidget/main.qml @@ -31,9 +31,8 @@ import QtQuick.Controls 1.3 Item { visible: true - width: 360 - height: 360 - + width: 200 + height: 200 ComboBox { anchors.centerIn: parent diff --git a/tests/manual/viewinqwidget/viewinqwidget.pro b/tests/manual/viewinqwidget/viewinqwidget.pro index fb0f24f4..bb7cb282 100644 --- a/tests/manual/viewinqwidget/viewinqwidget.pro +++ b/tests/manual/viewinqwidget/viewinqwidget.pro @@ -1,6 +1,5 @@ -QT += qml quick widgets +QT += qml quick widgets quickwidgets TARGET = viewinqwidget SOURCES += $$PWD/main.cpp - -OTHER_FILES += \ - qml/main.qml +DEFINES += SRCDIR=\\\"$$PWD/\\\" +OTHER_FILES += main.qml |