From 857c82f8a4a29399733218f783241b839b939f58 Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Wed, 4 Jun 2014 18:11:00 +0200 Subject: Doc: Updated Layout examples. -added links to and from the overviews. -added information on how to run the example. -updated copyright. Task-number: QTBUG-33597 Change-Id: Ib049cb94f136caa6916878959ae830248bd236b5 Reviewed-by: Martin Smith Reviewed-by: Nico Vertriest --- examples/widgets/doc/src/basiclayouts.qdoc | 22 +++++++++++++--------- examples/widgets/doc/src/borderlayout.qdoc | 11 ++++++++--- examples/widgets/doc/src/dynamiclayouts.qdoc | 12 +++++++++--- examples/widgets/doc/src/flowlayout.qdoc | 17 +++++++++-------- 4 files changed, 39 insertions(+), 23 deletions(-) (limited to 'examples/widgets') diff --git a/examples/widgets/doc/src/basiclayouts.qdoc b/examples/widgets/doc/src/basiclayouts.qdoc index d219b7bff3..0066317165 100644 --- a/examples/widgets/doc/src/basiclayouts.qdoc +++ b/examples/widgets/doc/src/basiclayouts.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the documentation of the Qt Toolkit. @@ -28,31 +28,35 @@ /*! \example layouts/basiclayouts \title Basic Layouts Example + \brief Shows how to use the standard layout managers. - \brief The Basic Layouts example shows how to use the standard layout - managers that are available in Qt: QBoxLayout, QGridLayout and - QFormLayout. + \e{Basic Layouts} shows how to use the standard layout managers that are + available in Qt: QBoxLayout, QGridLayout, and QFormLayout. \image basiclayouts-example.png Screenshot of the Basic Layouts example The QBoxLayout class lines up widgets horizontally or vertically. QHBoxLayout and QVBoxLayout are convenience subclasses of QBoxLayout. QGridLayout lays out widgets in cells by dividing the available space - into rows and columns. QFormLayout, on the other hand, lays out its + into rows and columns. QFormLayout, on the other hand, sets its children in a two-column form with labels in the left column and input fields in the right column. + For more information, visit the \l{Layout Management} page. + + \include examples-run.qdocinc + \section1 Dialog Class Definition \snippet layouts/basiclayouts/dialog.h 0 The \c Dialog class inherits QDialog. It is a custom widget that displays its child widgets using the geometry managers: - QHBoxLayout, QVBoxLayout, QGridLayout and QFormLayout. + QHBoxLayout, QVBoxLayout, QGridLayout, and QFormLayout. - We declare four private functions to simplify the class - constructor: The \c createMenu(), \c createHorizontalGroupBox(), - \c createGridGroupBox() and \c createFormGroupBox() functions create + There are four private functions to simplify the class + constructor: the \c createMenu(), \c createHorizontalGroupBox(), + \c createGridGroupBox(), and \c createFormGroupBox() functions create several widgets that the example uses to demonstrate how the layout affects their appearances. diff --git a/examples/widgets/doc/src/borderlayout.qdoc b/examples/widgets/doc/src/borderlayout.qdoc index 8a2958ee80..03a2bf1672 100644 --- a/examples/widgets/doc/src/borderlayout.qdoc +++ b/examples/widgets/doc/src/borderlayout.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the documentation of the Qt Toolkit. @@ -28,9 +28,14 @@ /*! \example layouts/borderlayout \title Border Layout Example + \brief Shows how to arrange child widgets along a border. - \brief The Border Layout example shows how to create a custom layout that arranges - child widgets according to a simple set of rules. + \e{Border Layout} implements a layout that arranges child widgets to + surround the main area. \image borderlayout-example.png + + For more information, visit the \l{Layout Management} page. + + \include examples-run.qdocinc */ diff --git a/examples/widgets/doc/src/dynamiclayouts.qdoc b/examples/widgets/doc/src/dynamiclayouts.qdoc index 5590ec61f1..497a0d23fd 100644 --- a/examples/widgets/doc/src/dynamiclayouts.qdoc +++ b/examples/widgets/doc/src/dynamiclayouts.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the documentation of the Qt Toolkit. @@ -28,7 +28,13 @@ /*! \example layouts/dynamiclayouts \title Dynamic Layouts Example + \brief Shows how to re-orient widgets in running applications. - \brief The Dynamic Layouts example shows how to move widgets around in - existing layouts. + \e{Dynamic Layouts} implements dynamically placed widgets within running + applications. The widget placement depends on whether \c Horizontal or \c + Vertical is chosen. + + For more information, visit the \l{Layout Management} page. + + \include examples-run.qdocinc */ diff --git a/examples/widgets/doc/src/flowlayout.qdoc b/examples/widgets/doc/src/flowlayout.qdoc index b482edf946..84de22416c 100644 --- a/examples/widgets/doc/src/flowlayout.qdoc +++ b/examples/widgets/doc/src/flowlayout.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the documentation of the Qt Toolkit. @@ -28,18 +28,19 @@ /*! \example layouts/flowlayout \title Flow Layout Example + \brief Shows how to arrange widgets for different window sizes. - \brief The Flow Layout example demonstrates a custom layout that arranges child - widgets from left to right and top to bottom in a top-level widget. + \e{Flow Layout} implements a layout that handles different window sizes. The + widget placement changes depending on the width of the application window. \image flowlayout-example.png Screenshot of the Flow Layout example - The items are first laid out horizontally and then vertically when each line - in the layout runs out of space. - The Flowlayout class mainly uses QLayout and QWidgetItem, while the - Window uses QWidget and QLabel. We will only document the definition - and implementation of \c FlowLayout below. + Window uses QWidget and QLabel. + + For more information, visit the \l{Layout Management} page. + + \include examples-run.qdocinc \section1 FlowLayout Class Definition -- cgit v1.2.3 From 3f39c0f76cec121181ab9d6a0cf057c1b1aeb25c Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 4 Jun 2014 12:25:56 +0200 Subject: Polish the image viewer example. - Open files passed on the command line. - Point the file dialog to the pictures location and use a filter string for the supported types. - Set the window title according to file name. Task-number: QTBUG-37203 Task-number: QTBUG-39287 Change-Id: I4e5e43875c3a7544c862c054181e75942939c1d5 Reviewed-by: David Faure --- examples/widgets/doc/src/imageviewer.qdoc | 21 ++++--- .../widgets/widgets/imageviewer/imageviewer.cpp | 68 ++++++++++++++-------- examples/widgets/widgets/imageviewer/imageviewer.h | 3 +- examples/widgets/widgets/imageviewer/main.cpp | 12 +++- 4 files changed, 70 insertions(+), 34 deletions(-) (limited to 'examples/widgets') diff --git a/examples/widgets/doc/src/imageviewer.qdoc b/examples/widgets/doc/src/imageviewer.qdoc index 96013e844a..6361e3f35b 100644 --- a/examples/widgets/doc/src/imageviewer.qdoc +++ b/examples/widgets/doc/src/imageviewer.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the documentation of the Qt Toolkit. @@ -112,15 +112,19 @@ {ImageViewer}'s appearance. \snippet widgets/imageviewer/imageviewer.cpp 1 - \snippet widgets/imageviewer/imageviewer.cpp 2 - In the \c open() slot, we show a file dialog to the user. The - easiest way to create a QFileDialog is to use the static - convenience functions. QFileDialog::getOpenFileName() returns an - existing file selected by the user. If the user presses \uicontrol - Cancel, QFileDialog returns an empty string. + In the \c open() slot, we show a file dialog to the user. We compile + a list of mime types for use as a filter by querying QImageReader + for the available mime type names. + + We show the file dialog until a valid file name is entered or + the user cancels. + + The function \c loadFile() is used to load the image. + + \snippet widgets/imageviewer/imageviewer.cpp 2 - Unless the file name is a empty string, we check if the file's + In the \c loadFile() function, we check if the file's format is an image format by constructing a QImage which tries to load the image from the file. If the constructor returns a null image, we use a QMessageBox to alert the user. @@ -135,7 +139,6 @@ information message with an \uicontrol OK button (the default) is sufficient, since the message is part of a normal operation. - \snippet widgets/imageviewer/imageviewer.cpp 3 \snippet widgets/imageviewer/imageviewer.cpp 4 If the format is supported, we display the image in \c imageLabel diff --git a/examples/widgets/widgets/imageviewer/imageviewer.cpp b/examples/widgets/widgets/imageviewer/imageviewer.cpp index 77ec92d57a..eae94a2499 100644 --- a/examples/widgets/widgets/imageviewer/imageviewer.cpp +++ b/examples/widgets/widgets/imageviewer/imageviewer.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. @@ -61,39 +61,61 @@ ImageViewer::ImageViewer() createActions(); createMenus(); - setWindowTitle(tr("Image Viewer")); - resize(500, 400); + resize(QGuiApplication::primaryScreen()->availableSize() * 3 / 5); } + //! [0] +//! [2] -//! [1] -void ImageViewer::open() -//! [1] //! [2] +bool ImageViewer::loadFile(const QString &fileName) { - QString fileName = QFileDialog::getOpenFileName(this, - tr("Open File"), QDir::currentPath()); - if (!fileName.isEmpty()) { - QImage image(fileName); - if (image.isNull()) { - QMessageBox::information(this, tr("Image Viewer"), - tr("Cannot load %1.").arg(fileName)); - return; - } + QImage image(fileName); + if (image.isNull()) { + QMessageBox::information(this, QGuiApplication::applicationDisplayName(), + tr("Cannot load %1.").arg(QDir::toNativeSeparators(fileName))); + setWindowFilePath(QString()); + imageLabel->setPixmap(QPixmap()); + imageLabel->adjustSize(); + return false; + } //! [2] //! [3] - imageLabel->setPixmap(QPixmap::fromImage(image)); + imageLabel->setPixmap(QPixmap::fromImage(image)); //! [3] //! [4] - scaleFactor = 1.0; + scaleFactor = 1.0; + + printAct->setEnabled(true); + fitToWindowAct->setEnabled(true); + updateActions(); - printAct->setEnabled(true); - fitToWindowAct->setEnabled(true); - updateActions(); + if (!fitToWindowAct->isChecked()) + imageLabel->adjustSize(); - if (!fitToWindowAct->isChecked()) - imageLabel->adjustSize(); - } + setWindowFilePath(fileName); + return true; } + //! [4] +//! [2] + +//! [1] +void ImageViewer::open() +{ + QStringList mimeTypeFilters; + foreach (const QByteArray &mimeTypeName, QImageReader::supportedMimeTypes()) + mimeTypeFilters.append(mimeTypeName); + mimeTypeFilters.sort(); + const QStringList picturesLocations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation); + QFileDialog dialog(this, tr("Open File"), + picturesLocations.isEmpty() ? QDir::currentPath() : picturesLocations.first()); + dialog.setAcceptMode(QFileDialog::AcceptOpen); + dialog.setMimeTypeFilters(mimeTypeFilters); + dialog.selectMimeTypeFilter("image/jpeg"); + + while (dialog.exec() == QDialog::Accepted && !loadFile(dialog.selectedFiles().first())) {} +} +//! [1] + //! [5] void ImageViewer::print() //! [5] //! [6] diff --git a/examples/widgets/widgets/imageviewer/imageviewer.h b/examples/widgets/widgets/imageviewer/imageviewer.h index 7a0f0eb845..a4fd82a696 100644 --- a/examples/widgets/widgets/imageviewer/imageviewer.h +++ b/examples/widgets/widgets/imageviewer/imageviewer.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. @@ -61,6 +61,7 @@ class ImageViewer : public QMainWindow public: ImageViewer(); + bool loadFile(const QString &); private slots: void open(); diff --git a/examples/widgets/widgets/imageviewer/main.cpp b/examples/widgets/widgets/imageviewer/main.cpp index f1697f9e3f..ee66b29591 100644 --- a/examples/widgets/widgets/imageviewer/main.cpp +++ b/examples/widgets/widgets/imageviewer/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. @@ -39,13 +39,23 @@ ****************************************************************************/ #include +#include #include "imageviewer.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); + QGuiApplication::setApplicationDisplayName(ImageViewer::tr("Image Viewer")); + QCommandLineParser commandLineParser; + commandLineParser.addHelpOption(); + commandLineParser.addPositionalArgument(ImageViewer::tr("[file]"), ImageViewer::tr("Image file to open.")); + commandLineParser.process(QCoreApplication::arguments()); ImageViewer imageViewer; + if (!commandLineParser.positionalArguments().isEmpty() + && !imageViewer.loadFile(commandLineParser.positionalArguments().front())) { + return -1; + } imageViewer.show(); return app.exec(); } -- cgit v1.2.3