From eda71105ff9a516059c6dd6643ff446a82edac81 Mon Sep 17 00:00:00 2001 From: Axel Spoerl Date: Tue, 9 May 2023 09:53:54 +0200 Subject: [PATCH] Move widgets Application example to manual tests With 6e77da640aa84c1efe330d4a5224c9c7425ece57, the documentviewer demo's TxtViewer plugin has been fully documented in order to replace the Application example. This patch moves the application example to manual tests. Pick-to: 6.5 Change-Id: I67d975e478c7bc840613c8af1301a4eafe8f1a42 Reviewed-by: Qt CI Bot Reviewed-by: Volker Hilsheimer --- doc/src/images/application-menus.png | Bin 30529 -> 0 bytes doc/src/images/application.png | Bin 39984 -> 0 bytes examples/widgets/doc/src/application.qdoc | 370 ------------------ examples/widgets/mainwindows/CMakeLists.txt | 1 - .../mainwindows/mainwindow/mainwindow.pro | 2 + examples/widgets/mainwindows/mainwindows.pro | 3 +- src/corelib/doc/src/resource-system.qdoc | 33 +- src/gui/kernel/qevent.cpp | 4 - .../widgets}/application/CMakeLists.txt | 0 .../widgets}/application/application.pro | 0 .../widgets}/application/application.qrc | 0 .../widgets}/application/images/copy.png | Bin .../widgets}/application/images/cut.png | Bin .../widgets}/application/images/new.png | Bin .../widgets}/application/images/open.png | Bin .../widgets}/application/images/paste.png | Bin .../widgets}/application/images/save.png | Bin .../examples/widgets}/application/main.cpp | 2 - .../widgets}/application/mainwindow.cpp | 68 +--- .../widgets}/application/mainwindow.h | 2 - 20 files changed, 15 insertions(+), 470 deletions(-) delete mode 100644 doc/src/images/application-menus.png delete mode 100644 doc/src/images/application.png delete mode 100644 examples/widgets/doc/src/application.qdoc rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/CMakeLists.txt (100%) rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/application.pro (100%) rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/application.qrc (100%) rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/images/copy.png (100%) rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/images/cut.png (100%) rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/images/new.png (100%) rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/images/open.png (100%) rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/images/paste.png (100%) rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/images/save.png (100%) rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/main.cpp (98%) rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/mainwindow.cpp (92%) rename {examples/widgets/mainwindows => tests/manual/examples/widgets}/application/mainwindow.h (98%) diff --git a/doc/src/images/application-menus.png b/doc/src/images/application-menus.png deleted file mode 100644 index 44ac9ca75f38cdf7ad3ce9f6b94a382a3890196f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30529 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

e-}^+* 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, a header file that contains the - definition of all classes in the Qt Core, Qt GUI and Qt Widgets - modules. This saves us from the trouble of having to include - every class individually. We also include \c mainwindow.h. - - You might wonder why we don't include \c in \c - mainwindow.h and be done with it. The reason is that including - such a large header from another header file can rapidly degrade - performances. Here, it wouldn't do any harm, but it's still - generally a good idea to include only the header files that are - strictly necessary from another header file. - - \snippet mainwindows/application/mainwindow.cpp 1 - \snippet mainwindows/application/mainwindow.cpp 2 - - In the constructor, we start by creating a QPlainTextEdit widget as a - child of the main window (the \c this object). Then we call - QMainWindow::setCentralWidget() to tell that this is going to be - the widget that occupies the central area of the main window, - between the toolbars and the status bar. - - Then we call \c createActions() and \c createStatusBar(), two private - functions that set up the user interface. After that, we call \c - readSettings() to restore the user's preferences. - - We establish a signal-slot connection between the QPlainTextEdit's - document object and our \c documentWasModified() slot. Whenever - the user modifies the text in the QPlainTextEdit, we want to update - the title bar to show that the file was modified. - - At the end, we set the window title using the private - \c setCurrentFile() function. We'll come back to this later. - - \target close event handler - \snippet mainwindows/application/mainwindow.cpp 3 - \snippet mainwindows/application/mainwindow.cpp 4 - - When the user attempts to close the window, we call the private - function \c maybeSave() to give the user the possibility to save - pending changes. The function returns true if the user wants the - application to close; otherwise, it returns false. In the first - case, we save the user's preferences to disk and accept the close - event; in the second case, we ignore the close event, meaning - that the application will stay up and running as if nothing - happened. - - \snippet mainwindows/application/mainwindow.cpp 5 - \snippet mainwindows/application/mainwindow.cpp 6 - - The \c newFile() slot is invoked when the user selects - \uicontrol{File|New} from the menu. We call \c maybeSave() to save any - pending changes and if the user accepts to go on, we clear the - QPlainTextEdit and call the private function \c setCurrentFile() to - update the window title and clear the - \l{QWidget::windowModified}{windowModified} flag. - - \snippet mainwindows/application/mainwindow.cpp 7 - \snippet mainwindows/application/mainwindow.cpp 8 - - The \c open() slot is invoked when the user clicks - \uicontrol{File|Open}. We pop up a QFileDialog asking the user to - choose a file. If the user chooses a file (i.e., \c fileName is - not an empty string), we call the private function \c loadFile() - to actually load the file. - - \snippet mainwindows/application/mainwindow.cpp 9 - \snippet mainwindows/application/mainwindow.cpp 10 - - The \c save() slot is invoked when the user clicks - \uicontrol{File|Save}. If the user hasn't provided a name for the file - yet, we call \c saveAs(); otherwise, we call the private function - \c saveFile() to actually save the file. - - \snippet mainwindows/application/mainwindow.cpp 11 - \snippet mainwindows/application/mainwindow.cpp 12 - - In \c saveAs(), we start by popping up a QFileDialog asking the - user to provide a name. If the user clicks \uicontrol{Cancel}, the - returned file name is empty, and we do nothing. - - \snippet mainwindows/application/mainwindow.cpp 13 - \snippet mainwindows/application/mainwindow.cpp 14 - - The application's About box is done using one statement, using - the QMessageBox::about() static function and relying on its - support for an HTML subset. - - The \l{QObject::tr()}{tr()} call around the literal string marks - the string for translation. It is a good habit to call - \l{QObject::tr()}{tr()} on all user-visible strings, in case you - later decide to translate your application to other languages. - The \l{Internationalization with Qt} overview covers - \l{QObject::tr()}{tr()} in more detail. - - \snippet mainwindows/application/mainwindow.cpp 15 - \snippet mainwindows/application/mainwindow.cpp 16 - - The \c documentWasModified() slot is invoked each time the text - in the QPlainTextEdit changes because of user edits. We call - QWidget::setWindowModified() to make the title bar show that the - file was modified. How this is done varies on each platform. - - \snippet mainwindows/application/mainwindow.cpp 17 - \snippet mainwindows/application/mainwindow.cpp 18 - \dots - \snippet mainwindows/application/mainwindow.cpp 22 - - The \c createActions() private function, which is called from the - \c MainWindow constructor, creates \l{QAction}s and populates - the menus and two toolbars. The code is very - repetitive, so we show only the actions corresponding to - \uicontrol{File|New}, \uicontrol{File|Open}, and \uicontrol{Help|About Qt}. - - A QAction is an object that represents one user action, such as - saving a file or invoking a dialog. An action can be put in a - QMenu or a QToolBar, or both, or in any other widget that - reimplements QWidget::actionEvent(). - - An action has a text that is shown in the menu, an icon, a - shortcut key, a tooltip, a status tip (shown in the status bar), - a "What's This?" text, and more. It emits a - \l{QAction::triggered()}{triggered()} signal whenever the user - invokes the action (e.g., by clicking the associated menu item or - toolbar button). - - Instances of QAction can be created by passing a parent QObject or - by using one of the convenience functions of QMenu, QMenuBar or QToolBar. - We create the actions that are in a menu as well as in a toolbar - parented on the window to prevent ownership issues. For actions - that are only in the menu, we use the convenience function - QMenu::addAction(), which allows us to pass text, icon and the - target object and its slot member function. - - Creating toolbars is very similar to creating menus. The same - actions that we put in the menus can be reused in the toolbars. - After creating the action, we add it to the toolbar using - QToolBar::addAction(). - - The code above contains one more idiom that must be explained. - For some of the actions, we specify an icon as a QIcon to the - QAction constructor. We use QIcon::fromTheme() to obtain - the correct standard icon from the underlying window system. - If that fails due to the platform not supporting it, we - pass a file name as fallback. Here, the file name starts - with \c{:}. Such file names aren't ordinary file names, but - rather path in the executable's stored resources. We'll come back - to this when we review the \c application.qrc file that's part of - the project. - - \snippet mainwindows/application/mainwindow.cpp 23 - \snippet mainwindows/application/mainwindow.cpp 24 - - The \uicontrol{Edit|Cut} and \uicontrol{Edit|Copy} actions must be available - only when the QPlainTextEdit contains selected text. We disable them - by default and connect the QPlainTextEdit::copyAvailable() signal to - the QAction::setEnabled() slot, ensuring that the actions are - disabled when the text editor has no selection. - - Just before we create the \uicontrol{Help} menu, we call - QMenuBar::addSeparator(). This has no effect for most widget - styles (e.g., Windows and \macos styles), but for some - styles this makes sure that \uicontrol{Help} is pushed to the right - side of the menu bar. - - \snippet mainwindows/application/mainwindow.cpp 32 - \snippet mainwindows/application/mainwindow.cpp 33 - - QMainWindow::statusBar() returns a pointer to the main window's - QStatusBar widget. Like with \l{QMainWindow::menuBar()}, the - widget is automatically created the first time the function is - called. - - \snippet mainwindows/application/mainwindow.cpp 34 - \snippet mainwindows/application/mainwindow.cpp 36 - - The \c readSettings() function is called from the constructor to - load the user's preferences and other application settings. The - QSettings class provides a high-level interface for storing - settings permanently on disk. On Windows, it uses the (in)famous - Windows registry; on \macos, it uses the native XML-based - CFPreferences API; on Unix/X11, it uses text files. - - The QSettings constructor takes arguments that identify your - company and the name of the product. This ensures that the - settings for different applications are kept separately. - - We use QSettings::value() to extract the value of the geometry setting. - The second argument to QSettings::value() is - optional and specifies a default value for the setting if there - exists none. This value is used the first time the application is - run. - - We use QWidget::saveGeometry() and Widget::restoreGeometry() to - save the position. They use an opaque QByteArray to store - screen number, geometry and window state. - - \snippet mainwindows/application/mainwindow.cpp 37 - \snippet mainwindows/application/mainwindow.cpp 39 - - The \c writeSettings() function is called from \c closeEvent(). - Writing settings is similar to reading them, except simpler. The - arguments to the QSettings constructor must be the same as in \c - readSettings(). - - \snippet mainwindows/application/mainwindow.cpp 40 - \snippet mainwindows/application/mainwindow.cpp 41 - - The \c maybeSave() function is called to save pending changes. If - there are pending changes, it pops up a QMessageBox giving the - user to save the document. The options are QMessageBox::Yes, - QMessageBox::No, and QMessageBox::Cancel. The \uicontrol{Yes} button is - made the default button (the button that is invoked when the user - presses \uicontrol{Return}) using the QMessageBox::Default flag; the - \uicontrol{Cancel} button is made the escape button (the button that is - invoked when the user presses \uicontrol{Esc}) using the - QMessageBox::Escape flag. - - The \c maybeSave() function returns \c true in all cases, except - when the user clicks \uicontrol{Cancel} or saving the file fails. - The caller must check the return value and stop whatever it was - doing if the return value is \c false. - - \snippet mainwindows/application/mainwindow.cpp 42 - \snippet mainwindows/application/mainwindow.cpp 43 - - In \c loadFile(), we use QFile and QTextStream to read in the - data. The QFile object provides access to the bytes stored in a - file. - - We start by opening the file in read-only mode. The QFile::Text - flag indicates that the file is a text file, not a binary file. - On Unix and \macos, this makes no difference, but on Windows, - it ensures that the "\\r\\n" end-of-line sequence is converted to - "\\n" when reading. - - If we successfully opened the file, we use a QTextStream object - to read in the data. QTextStream automatically converts the 8-bit - data into a Unicode QString and supports various encodings. If no - encoding is specified, QTextStream assumes the file is encoded in - UTF-8. - - Since the call to QTextStream::readAll() might take some time, we - set the cursor to be Qt::WaitCursor for the entire application - while it goes on. - - At the end, we call the private \c setCurrentFile() function, - which we'll cover in a moment, and we display the string "File - loaded" in the status bar for 2 seconds (2000 milliseconds). - - \snippet mainwindows/application/mainwindow.cpp 44 - \snippet mainwindows/application/mainwindow.cpp 45 - - Saving a file is similar to loading one. We use QSaveFile to ensure - all data are safely written and existing files are not damaged - should writing fail. - We use the QFile::Text flag to make sure that on Windows, "\\n" - is converted into "\\r\\n" to conform to the Windows convention. - - - \snippet mainwindows/application/mainwindow.cpp 46 - \snippet mainwindows/application/mainwindow.cpp 47 - - The \c setCurrentFile() function is called to reset the state of - a few variables when a file is loaded or saved, or when the user - starts editing a new file (in which case \c fileName is empty). - We update the \c curFile variable, clear the - QTextDocument::modified flag and the associated \c - QWidget:windowModified flag, and update the window title to - contain the new file name (or \c untitled.txt). - - The \c strippedName() function call around \c curFile in the - QWidget::setWindowTitle() call shortens the file name to exclude - the path. Here's the function: - - \snippet mainwindows/application/mainwindow.cpp 48 - \snippet mainwindows/application/mainwindow.cpp 49 - - \section1 The main() Function - - The \c main() function for this application is typical of - applications that contain one main window: - - \snippet mainwindows/application/main.cpp 0 - - The main function uses QCommandLineParser to check whether some file - argument was passed to the application and loads it via - MainWindow::loadFile(). - - \section1 The Resource File - - As you will probably recall, for some of the actions, we - specified icons with file names starting with \c{:} and mentioned - that such file names aren't ordinary file names, but path in the - executable's stored resources. These resources are compiled - - The resources associated with an application are specified in a - \c .qrc file, an XML-based file format that lists files on the - disk. Here's the \c application.qrc file that's used by the - Application example: - - \quotefile mainwindows/application/application.qrc - - The \c .png files listed in the \c application.qrc file are files - that are part of the Application example's source tree. Paths are - relative to the directory where the \c application.qrc file is - located (the \c mainwindows/application directory). - - The resource file must be mentioned in the \c application.pro - file so that \c qmake knows about it: - - \snippet mainwindows/application/application.pro 0 - - \c qmake will produce make rules to generate a file called \c - qrc_application.cpp that is linked into the application. This - file contains all the data for the images and other resources as - static C++ arrays of compressed binary data. See - \l{resources.html}{The Qt Resource System} for more information - about resources. -*/ diff --git a/examples/widgets/mainwindows/CMakeLists.txt b/examples/widgets/mainwindows/CMakeLists.txt index f8457d50a72..ece36efdf06 100644 --- a/examples/widgets/mainwindows/CMakeLists.txt +++ b/examples/widgets/mainwindows/CMakeLists.txt @@ -1,7 +1,6 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause -qt_internal_add_example(application) qt_internal_add_example(dockwidgets) qt_internal_add_example(mainwindow) qt_internal_add_example(mdi) diff --git a/examples/widgets/mainwindows/mainwindow/mainwindow.pro b/examples/widgets/mainwindows/mainwindow/mainwindow.pro index 446d07ee6ed..49f4d307205 100644 --- a/examples/widgets/mainwindows/mainwindow/mainwindow.pro +++ b/examples/widgets/mainwindows/mainwindow/mainwindow.pro @@ -9,7 +9,9 @@ build_all:!build_pass { CONFIG += release } +#! [qrc] RESOURCES += mainwindow.qrc +#! [qrc] # install target.path = $$[QT_INSTALL_EXAMPLES]/widgets/mainwindows/mainwindow diff --git a/examples/widgets/mainwindows/mainwindows.pro b/examples/widgets/mainwindows/mainwindows.pro index 7a53cc6fa75..9b19bdc4315 100644 --- a/examples/widgets/mainwindows/mainwindows.pro +++ b/examples/widgets/mainwindows/mainwindows.pro @@ -1,6 +1,5 @@ TEMPLATE = subdirs -SUBDIRS = application \ - dockwidgets \ +SUBDIRS = dockwidgets \ mainwindow \ mdi \ menus diff --git a/src/corelib/doc/src/resource-system.qdoc b/src/corelib/doc/src/resource-system.qdoc index a0d253799a0..16f76902d46 100644 --- a/src/corelib/doc/src/resource-system.qdoc +++ b/src/corelib/doc/src/resource-system.qdoc @@ -52,15 +52,15 @@ Here's an example \c .qrc file: - \quotefile resource-system/application.qrc + \quotefile resource-system/mainwindow.qrc Each \c element in the XML identifies a file in the application's source tree. The path is resolved relative to the directory containing the \c .qrc file. The path is also used by default to identify the file's content at runtime. - That is, the file \c copy.png will be available in the resource system as - \c{:/images/copy.png} or \c{qrc:/images/copy.png}. + That is, the file \c titlebarLeft.png will be available in the resource system as + \c{:/res/titlebarLeft.png} or \c{qrc:/res/titlebarLeft.png}. To override this default run-time name, see \l{Prefixes} and \l{Aliases}. \e{Qt Creator}, \e{Qt Design Studio}, \QD, and \e{Qt Visual Studio Tools} @@ -102,22 +102,16 @@ variable. If you add a \c .qrc file path to the variable, the listed resource files will be embedded into the generated library or executable: - \snippet resource-system/application.pro 0 - - For simple applications, it is also possible to let qmake generate the - \c .qrc file for you, avoiding the need for an additional file to be - maintained: - - \snippet resource-system/application.pro 1 + \snippet resource-system/mainwindow.pro qrc This creates a resource of several \c{.png} files, that are addressable - like this: \c{":/images/copy.png"}. + like this: \c{":/res/titlebarLeft.png"}. If the directory layout of the files you want to embed into the resource doesn't match the expectations of the application, you can specify \c{resources.base}. \c base is a path prefix that denotes the root point of the file's alias. In the example above, if \c{resources.base} is set to - \c{"images"}, then \c{copy.png} is addressable as \c{":/copy.png"}. + \c{"res"}, then \c{titlebarLeft.png} is addressable as \c{":/titlebarLeft.png"}. \section1 Runtime API @@ -136,7 +130,7 @@ \snippet resource-system/main.cpp url - See the \l{mainwindows/application}{Application} example for an actual + See the \l{mainwindows/mainwindow}{Mainwindow} example for an actual application that uses Qt's resource system to store its icons. \section1 Advanced Topics @@ -216,14 +210,7 @@ resource file's content and metadata is then done after the compilation and linking phase, through another rcc call. - For qmake, this is enabled by adding \c resources_big to the \c CONFIG - variable: - - \snippet resource-system/application.pro 2 - - For CMake, you need to use the \l{qt_add_big_resources} function: - - \snippet resource-system/CMakeLists.txt qt_add_big_resources + For CMake, you need to use the \l{qt_add_big_resources} function. \section2 External Resource Files @@ -251,13 +238,13 @@ resource compiler \l rcc: \code - rcc -g python application.qrc > application_rc.py + rcc -g python mainwindow.qrc > mainwindow_rc.py \endcode The module can then be imported in the application: \code - import application_rc.py + import mainwindow_rc.py \endcode \section2 Compression diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index 6eebac9934d..19fdcdc97ff 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -1837,10 +1837,6 @@ Q_IMPL_EVENT_COMMON(QResizeEvent) special handling, you should reimplement the event handler and ignore() the event. - The \l{mainwindows/application#close event handler}{closeEvent() in the - Application example} shows a close event handler that - asks whether to save a document before closing. - If you want the widget to be deleted when it is closed, create it with the Qt::WA_DeleteOnClose flag. This is very useful for independent top-level windows in a multi-window application. diff --git a/examples/widgets/mainwindows/application/CMakeLists.txt b/tests/manual/examples/widgets/application/CMakeLists.txt similarity index 100% rename from examples/widgets/mainwindows/application/CMakeLists.txt rename to tests/manual/examples/widgets/application/CMakeLists.txt diff --git a/examples/widgets/mainwindows/application/application.pro b/tests/manual/examples/widgets/application/application.pro similarity index 100% rename from examples/widgets/mainwindows/application/application.pro rename to tests/manual/examples/widgets/application/application.pro diff --git a/examples/widgets/mainwindows/application/application.qrc b/tests/manual/examples/widgets/application/application.qrc similarity index 100% rename from examples/widgets/mainwindows/application/application.qrc rename to tests/manual/examples/widgets/application/application.qrc diff --git a/examples/widgets/mainwindows/application/images/copy.png b/tests/manual/examples/widgets/application/images/copy.png similarity index 100% rename from examples/widgets/mainwindows/application/images/copy.png rename to tests/manual/examples/widgets/application/images/copy.png diff --git a/examples/widgets/mainwindows/application/images/cut.png b/tests/manual/examples/widgets/application/images/cut.png similarity index 100% rename from examples/widgets/mainwindows/application/images/cut.png rename to tests/manual/examples/widgets/application/images/cut.png diff --git a/examples/widgets/mainwindows/application/images/new.png b/tests/manual/examples/widgets/application/images/new.png similarity index 100% rename from examples/widgets/mainwindows/application/images/new.png rename to tests/manual/examples/widgets/application/images/new.png diff --git a/examples/widgets/mainwindows/application/images/open.png b/tests/manual/examples/widgets/application/images/open.png similarity index 100% rename from examples/widgets/mainwindows/application/images/open.png rename to tests/manual/examples/widgets/application/images/open.png diff --git a/examples/widgets/mainwindows/application/images/paste.png b/tests/manual/examples/widgets/application/images/paste.png similarity index 100% rename from examples/widgets/mainwindows/application/images/paste.png rename to tests/manual/examples/widgets/application/images/paste.png diff --git a/examples/widgets/mainwindows/application/images/save.png b/tests/manual/examples/widgets/application/images/save.png similarity index 100% rename from examples/widgets/mainwindows/application/images/save.png rename to tests/manual/examples/widgets/application/images/save.png diff --git a/examples/widgets/mainwindows/application/main.cpp b/tests/manual/examples/widgets/application/main.cpp similarity index 98% rename from examples/widgets/mainwindows/application/main.cpp rename to tests/manual/examples/widgets/application/main.cpp index 0437f91f73a..903150c1c4f 100644 --- a/examples/widgets/mainwindows/application/main.cpp +++ b/tests/manual/examples/widgets/application/main.cpp @@ -1,7 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -//! [0] #include #include #include @@ -29,4 +28,3 @@ int main(int argc, char *argv[]) mainWin.show(); return app.exec(); } -//! [0] diff --git a/examples/widgets/mainwindows/application/mainwindow.cpp b/tests/manual/examples/widgets/application/mainwindow.cpp similarity index 92% rename from examples/widgets/mainwindows/application/mainwindow.cpp rename to tests/manual/examples/widgets/application/mainwindow.cpp index d49060e9b61..fcb55907518 100644 --- a/examples/widgets/mainwindows/application/mainwindow.cpp +++ b/tests/manual/examples/widgets/application/mainwindow.cpp @@ -1,16 +1,12 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -//! [0] #include #include "mainwindow.h" -//! [0] -//! [1] MainWindow::MainWindow() : textEdit(new QPlainTextEdit) -//! [1] //! [2] { setCentralWidget(textEdit); @@ -30,11 +26,8 @@ MainWindow::MainWindow() setCurrentFile(QString()); setUnifiedTitleAndToolBarOnMac(true); } -//! [2] -//! [3] void MainWindow::closeEvent(QCloseEvent *event) -//! [3] //! [4] { if (maybeSave()) { writeSettings(); @@ -43,22 +36,16 @@ void MainWindow::closeEvent(QCloseEvent *event) event->ignore(); } } -//! [4] -//! [5] void MainWindow::newFile() -//! [5] //! [6] { if (maybeSave()) { textEdit->clear(); setCurrentFile(QString()); } } -//! [6] -//! [7] void MainWindow::open() -//! [7] //! [8] { if (maybeSave()) { QString fileName = QFileDialog::getOpenFileName(this); @@ -66,11 +53,8 @@ void MainWindow::open() loadFile(fileName); } } -//! [8] -//! [9] bool MainWindow::save() -//! [9] //! [10] { if (curFile.isEmpty()) { return saveAs(); @@ -78,11 +62,8 @@ bool MainWindow::save() return saveFile(curFile); } } -//! [10] -//! [11] bool MainWindow::saveAs() -//! [11] //! [12] { QFileDialog dialog(this); dialog.setWindowModality(Qt::WindowModal); @@ -91,30 +72,21 @@ bool MainWindow::saveAs() return false; return saveFile(dialog.selectedFiles().first()); } -//! [12] -//! [13] void MainWindow::about() -//! [13] //! [14] { QMessageBox::about(this, tr("About Application"), tr("The Application example demonstrates how to " "write modern GUI applications using Qt, with a menu bar, " "toolbars, and a status bar.")); } -//! [14] -//! [15] void MainWindow::documentWasModified() -//! [15] //! [16] { setWindowModified(textEdit->document()->isModified()); } -//! [16] -//! [17] void MainWindow::createActions() -//! [17] //! [18] { QMenu *fileMenu = menuBar()->addMenu(tr("&File")); @@ -127,7 +99,6 @@ void MainWindow::createActions() fileMenu->addAction(newAct); fileToolBar->addAction(newAct); -//! [19] const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png")); QAction *openAct = new QAction(openIcon, tr("&Open..."), this); openAct->setShortcuts(QKeySequence::Open); @@ -135,7 +106,6 @@ void MainWindow::createActions() connect(openAct, &QAction::triggered, this, &MainWindow::open); fileMenu->addAction(openAct); fileToolBar->addAction(openAct); -//! [18] //! [19] const QIcon saveIcon = QIcon::fromTheme("document-save", QIcon(":/images/save.png")); QAction *saveAct = new QAction(saveIcon, tr("&Save"), this); @@ -150,24 +120,19 @@ void MainWindow::createActions() saveAsAct->setShortcuts(QKeySequence::SaveAs); saveAsAct->setStatusTip(tr("Save the document under a new name")); -//! [20] - fileMenu->addSeparator(); const QIcon exitIcon = QIcon::fromTheme("application-exit"); QAction *exitAct = fileMenu->addAction(exitIcon, tr("E&xit"), this, &QWidget::close); exitAct->setShortcuts(QKeySequence::Quit); -//! [20] exitAct->setStatusTip(tr("Exit the application")); -//! [21] QMenu *editMenu = menuBar()->addMenu(tr("&Edit")); QToolBar *editToolBar = addToolBar(tr("Edit")); -//! + #ifndef QT_NO_CLIPBOARD const QIcon cutIcon = QIcon::fromTheme("edit-cut", QIcon(":/images/cut.png")); QAction *cutAct = new QAction(cutIcon, tr("Cu&t"), this); -//! [21] cutAct->setShortcuts(QKeySequence::Cut); cutAct->setStatusTip(tr("Cut the current selection's contents to the " "clipboard")); @@ -201,34 +166,23 @@ void MainWindow::createActions() QAction *aboutAct = helpMenu->addAction(tr("&About"), this, &MainWindow::about); aboutAct->setStatusTip(tr("Show the application's About box")); -//! [22] - QAction *aboutQtAct = helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt); aboutQtAct->setStatusTip(tr("Show the Qt library's About box")); -//! [22] -//! [23] #ifndef QT_NO_CLIPBOARD cutAct->setEnabled(false); -//! [23] //! [24] copyAct->setEnabled(false); connect(textEdit, &QPlainTextEdit::copyAvailable, cutAct, &QAction::setEnabled); connect(textEdit, &QPlainTextEdit::copyAvailable, copyAct, &QAction::setEnabled); #endif // !QT_NO_CLIPBOARD } -//! [24] -//! [32] void MainWindow::createStatusBar() -//! [32] //! [33] { statusBar()->showMessage(tr("Ready")); } -//! [33] -//! [34] //! [35] void MainWindow::readSettings() -//! [34] //! [36] { QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName()); const QByteArray geometry = settings.value("geometry", QByteArray()).toByteArray(); @@ -241,20 +195,14 @@ void MainWindow::readSettings() restoreGeometry(geometry); } } -//! [35] //! [36] -//! [37] //! [38] void MainWindow::writeSettings() -//! [37] //! [39] { QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName()); settings.setValue("geometry", saveGeometry()); } -//! [38] //! [39] -//! [40] bool MainWindow::maybeSave() -//! [40] //! [41] { if (!textEdit->document()->isModified()) return true; @@ -273,11 +221,8 @@ bool MainWindow::maybeSave() } return true; } -//! [41] -//! [42] void MainWindow::loadFile(const QString &fileName) -//! [42] //! [43] { QFile file(fileName); if (!file.open(QFile::ReadOnly | QFile::Text)) { @@ -299,11 +244,8 @@ void MainWindow::loadFile(const QString &fileName) setCurrentFile(fileName); statusBar()->showMessage(tr("File loaded"), 2000); } -//! [43] -//! [44] bool MainWindow::saveFile(const QString &fileName) -//! [44] //! [45] { QString errorMessage; @@ -331,11 +273,8 @@ bool MainWindow::saveFile(const QString &fileName) statusBar()->showMessage(tr("File saved"), 2000); return true; } -//! [45] -//! [46] void MainWindow::setCurrentFile(const QString &fileName) -//! [46] //! [47] { curFile = fileName; textEdit->document()->setModified(false); @@ -346,15 +285,12 @@ void MainWindow::setCurrentFile(const QString &fileName) shownName = "untitled.txt"; setWindowFilePath(shownName); } -//! [47] -//! [48] QString MainWindow::strippedName(const QString &fullFileName) -//! [48] //! [49] { return QFileInfo(fullFileName).fileName(); } -//! [49] + #ifndef QT_NO_SESSIONMANAGER void MainWindow::commitData(QSessionManager &manager) { diff --git a/examples/widgets/mainwindows/application/mainwindow.h b/tests/manual/examples/widgets/application/mainwindow.h similarity index 98% rename from examples/widgets/mainwindows/application/mainwindow.h rename to tests/manual/examples/widgets/application/mainwindow.h index caeaf704008..f1a4e2ac4f4 100644 --- a/examples/widgets/mainwindows/application/mainwindow.h +++ b/tests/manual/examples/widgets/application/mainwindow.h @@ -13,7 +13,6 @@ class QPlainTextEdit; class QSessionManager; QT_END_NAMESPACE -//! [0] class MainWindow : public QMainWindow { Q_OBJECT @@ -50,6 +49,5 @@ private: QPlainTextEdit *textEdit; QString curFile; }; -//! [0] #endif