Doc: move notepad example to qtbase and improve it
- Edited gettingstartedqt.qdoc - update .pro files - replaced snippet statements by \quotefromfile - removed second version of notepad.h and notepad.cpp that were made only for quoting snippets (\quotefromfile reads from the program code) - show current filename in header of window - added checking routine on filename in Save method Task-number: QTBUG-63984 Change-Id: I5298d761763a4dfeb705a1d9b77354be853ada88 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
BIN
examples/widgets/doc/images/notepad.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
examples/widgets/doc/images/notepad1.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
examples/widgets/doc/images/notepad2.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
examples/widgets/doc/images/notepad3.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
examples/widgets/doc/images/notepad4.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
examples/widgets/doc/images/notepad_menu.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
559
examples/widgets/tutorials/gettingstartedqt.qdoc
Normal file
@ -0,0 +1,559 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:FDL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Free Documentation License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Free
|
||||||
|
** Documentation License version 1.3 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file included in the packaging of
|
||||||
|
** this file. Please review the following information to ensure
|
||||||
|
** the GNU Free Documentation License version 1.3 requirements
|
||||||
|
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\example tutorials/notepad
|
||||||
|
\title Getting Started Programming with Qt Widgets
|
||||||
|
\brief A tutorial for Qt Widgets based on a notepad application
|
||||||
|
|
||||||
|
In this topic, we teach basic Qt knowledge by implementing a simple
|
||||||
|
Notepad application using C++ and the \l{Qt Widgets} module. The
|
||||||
|
application is a small text editor which allows you to create a text
|
||||||
|
file, save it, print it,
|
||||||
|
or reopen and edit it again. You can also set the font to be used.
|
||||||
|
|
||||||
|
\image notepad1.png "Notepad application"
|
||||||
|
|
||||||
|
You can find the final Notepad source files in the qtdoc repository
|
||||||
|
in the tutorials/notepad directory. You can either fetch
|
||||||
|
the Qt 5 sources from Qt Project or install them as part of Qt 5.
|
||||||
|
The application is also available in the example list of Qt Creator's
|
||||||
|
Welcome mode.
|
||||||
|
|
||||||
|
\section1 Creating the Notepad Project
|
||||||
|
|
||||||
|
Setting up a new project in Qt Creator is aided by a wizard that
|
||||||
|
guides you step-by-step through the project creation process. The
|
||||||
|
wizard prompts you to enter the settings needed for that particular
|
||||||
|
type of project and creates the project for you.
|
||||||
|
|
||||||
|
\image notepad2.png "Qt Creator New File or Project dialog"
|
||||||
|
|
||||||
|
To create the Notepad project, select \b File > \b{New File or
|
||||||
|
Project} > \b Applications > \b {Qt Widgets Application} > \b Choose,
|
||||||
|
and follow the instructions of the wizard. In the
|
||||||
|
\b{Class Information}
|
||||||
|
dialog, type \b Notepad as the class name and select \b QMainWindow
|
||||||
|
as the base class.
|
||||||
|
|
||||||
|
\image notepad3.png "Class Information Dialog"
|
||||||
|
|
||||||
|
The \b {Qt Widgets Application} wizard creates a project that contains
|
||||||
|
a main source file and a set of files that specify a user interface
|
||||||
|
(Notepad widget):
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li notepad.pro - the project file.
|
||||||
|
\li main.cpp - the main source file for the application.
|
||||||
|
\li notepad.cpp - the source file of the notepad class of the
|
||||||
|
Notepad widget.
|
||||||
|
\li notepad.h - the header file of the notepad class for the
|
||||||
|
Notepad widget.
|
||||||
|
\li notepad.ui - the UI form for the Notepad widget.
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
The .cpp, .h, and .ui files come with the necessary boiler plate code
|
||||||
|
for you to be able to build and run the project. The .pro file is
|
||||||
|
complete.
|
||||||
|
We will take a closer look at the file contents in the following
|
||||||
|
sections.
|
||||||
|
|
||||||
|
\b{Learn More}
|
||||||
|
|
||||||
|
\table
|
||||||
|
\header
|
||||||
|
\li About
|
||||||
|
\li Here
|
||||||
|
\row
|
||||||
|
\li Using Qt Creator
|
||||||
|
\li \l{Qt Creator Manual}{Qt Creator}
|
||||||
|
\row
|
||||||
|
\li Creating other kind of applications with Qt Creator
|
||||||
|
\li \l{Qt Creator: Tutorials}{Qt Creator Tutorials}
|
||||||
|
\endtable
|
||||||
|
|
||||||
|
|
||||||
|
\section1 Main Source File
|
||||||
|
|
||||||
|
The wizard generates the following code in the main.cpp file:
|
||||||
|
|
||||||
|
\quotefromfile tutorials/notepad/main.cpp
|
||||||
|
\skipto "notepad.h"
|
||||||
|
\printuntil EditorApp.exec()
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
|
We will go through the code line by line. The following lines include
|
||||||
|
the header files for the Notepad widget and QApplication. All Qt classes
|
||||||
|
have a header file named after them.
|
||||||
|
|
||||||
|
\quotefromfile tutorials/notepad/main.cpp
|
||||||
|
\skipto notepad.h
|
||||||
|
\printuntil QApplication
|
||||||
|
|
||||||
|
The following line defines the main function that is the entry point
|
||||||
|
for all C and C++ based applications:
|
||||||
|
|
||||||
|
\printline main
|
||||||
|
|
||||||
|
The following line creates a QApplication object. This object manages
|
||||||
|
application-wide resources and is necessary to run any Qt program
|
||||||
|
that uses Qt Widgets. It constructs an application object with \c argc
|
||||||
|
command line arguments run in \c argv. (For GUI applications that
|
||||||
|
do not use Qt Widgets, you can use QGuiApplication instead.)
|
||||||
|
|
||||||
|
\skipuntil {
|
||||||
|
\printuntil QApplication
|
||||||
|
|
||||||
|
The following line creates the Notepad object. This is the object for
|
||||||
|
which the wizard created the class and the UI file. The user interface
|
||||||
|
contains visual elements that are called \c widgets in Qt. Examples
|
||||||
|
of widgets are text edits, scroll bars, labels, and radio buttons. A
|
||||||
|
widget can also be a container for other widgets; a dialog or a main
|
||||||
|
application window, for example.
|
||||||
|
|
||||||
|
\printline Notepad
|
||||||
|
|
||||||
|
The following line shows the Notepad widget on the screen in its own
|
||||||
|
window. Widgets can also function as containers. An example of this
|
||||||
|
is QMainWindow which often contains several types of widgets. Widgets
|
||||||
|
are not visible by default; the function \l{QWidget::}{show()} makes
|
||||||
|
the widget visible.
|
||||||
|
|
||||||
|
\printline Editor.show
|
||||||
|
|
||||||
|
The following line makes the QApplication enter its event loop. When
|
||||||
|
a Qt application is running, events are generated and sent to the
|
||||||
|
widgets of the application. Examples of events are mouse presses
|
||||||
|
and key strokes.
|
||||||
|
|
||||||
|
\printline EditorApp.exec
|
||||||
|
|
||||||
|
\b{Learn More}
|
||||||
|
|
||||||
|
\table
|
||||||
|
\header
|
||||||
|
\li About
|
||||||
|
\li Here
|
||||||
|
\row
|
||||||
|
\li Widgets and Window Geometry
|
||||||
|
\li \l{Window and Dialog Widgets}
|
||||||
|
\row
|
||||||
|
\li Events and event handling
|
||||||
|
\li \l{The Event System}
|
||||||
|
\endtable
|
||||||
|
|
||||||
|
\section1 Designing a UI
|
||||||
|
|
||||||
|
The wizard generates a user interface definition in XML format: notepad.ui.
|
||||||
|
When you open the notepad.ui file in Qt Creator, it automatically
|
||||||
|
opens in the integrated Qt Designer.
|
||||||
|
|
||||||
|
When you build the application, Qt Creator launches the Qt
|
||||||
|
\l{User Interface Compiler (uic)} that reads the .ui file and creates
|
||||||
|
a corresponding C++ header file, ui_notepad.h.
|
||||||
|
|
||||||
|
\section2 Using Qt Designer
|
||||||
|
|
||||||
|
The wizard creates an application that uses a QMainWindow. It has
|
||||||
|
its own layout to which you can add a menu bar, dock widgets, toolbars,
|
||||||
|
and a status bar. The center area can be occupied by any kind of widget.
|
||||||
|
The wizard places the Notepad widget there.
|
||||||
|
|
||||||
|
To add widgets in Qt Designer:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
\li In the Qt Creator \b Editor mode, double-click the notepad.ui
|
||||||
|
file in the \b Projects view to launch the file in the integrated
|
||||||
|
Qt Designer.
|
||||||
|
\li Drag and drop widgets Text Edit (QTextEdit) to the form.
|
||||||
|
\li Press \b {Ctrl+A} (or \b {Cmd+A}) to select the widgets and click
|
||||||
|
\b {Lay out Vertically} (or press \b {Ctrl+L}) to apply a vertical
|
||||||
|
layout (QVBoxLayout).
|
||||||
|
\li Press \b {Ctrl+S} (or \b {Cmd+S}) to save your changes.
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
The UI now looks as follows in Qt Designer:
|
||||||
|
|
||||||
|
\image notepad4.png
|
||||||
|
|
||||||
|
You can view the generated XML file in the code editor:
|
||||||
|
|
||||||
|
\quotefromfile tutorials/notepad/notepad.ui
|
||||||
|
|
||||||
|
\printuntil QMenuBar
|
||||||
|
\dots
|
||||||
|
|
||||||
|
The following line contains the XML declaration, which specifies the
|
||||||
|
XML version and character encoding used in the document:
|
||||||
|
|
||||||
|
\code
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
The rest of the file specifies an \c ui element that defines a
|
||||||
|
Notepad widget:
|
||||||
|
|
||||||
|
\code
|
||||||
|
<ui version="4.0">
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
The UI file is used together with the header and source file of the
|
||||||
|
Notepad class. We will look at the rest of the UI file in the later
|
||||||
|
sections.
|
||||||
|
|
||||||
|
\section2 Notepad Header File
|
||||||
|
|
||||||
|
The wizard generated a header file for the Notepad class that has the
|
||||||
|
necessary #includes, a constructor, a destructor, and the Ui object.
|
||||||
|
The file looks as follows:
|
||||||
|
|
||||||
|
\snippet tutorials/notepad/notepad.h all
|
||||||
|
|
||||||
|
The following line includes QMainWindow that provides a main application
|
||||||
|
window:
|
||||||
|
|
||||||
|
\snippet tutorials/notepad/notepad.h 1
|
||||||
|
|
||||||
|
The following lines declare the Notepad class in the Ui namespace,
|
||||||
|
which is the standard namespace for the UI classes generated from
|
||||||
|
.ui files by the \c uic tool:
|
||||||
|
|
||||||
|
\snippet tutorials/notepad/notepad.h 2
|
||||||
|
|
||||||
|
The class declaration contains the \c Q_OBJECT macro. It must come
|
||||||
|
first in the class definition, and declares our class as a QObject.
|
||||||
|
Naturally, it must also inherit from QObject. A QObject adds several
|
||||||
|
abilities to a normal C++ class. Notably, the class name and slot
|
||||||
|
names can be queried at runtime. It is also possible to query a slot's
|
||||||
|
parameter types and invoke it.
|
||||||
|
|
||||||
|
\snippet tutorials/notepad/notepad.h 3
|
||||||
|
|
||||||
|
The following lines declare a constructor that has a default argument
|
||||||
|
called \c parent.
|
||||||
|
The value 0 indicates that the widget has no parent (it is a top-level
|
||||||
|
widget).
|
||||||
|
|
||||||
|
\snippet tutorials/notepad/notepad.h 4
|
||||||
|
|
||||||
|
The following line declares a virtual destructor to free the resources
|
||||||
|
that were acquired by the object during its life-cycle. According to
|
||||||
|
the C++ naming convention, destructors have the same name as the class
|
||||||
|
they are associated with, prefixed with a tilde (~). In QObject,
|
||||||
|
destructors are virtual to ensure that the destructors of derived
|
||||||
|
classes are invoked properly when an object is deleted through a
|
||||||
|
pointer-to-base-class.
|
||||||
|
|
||||||
|
\snippet tutorials/notepad/notepad.h 5
|
||||||
|
|
||||||
|
The following lines declare a member variable which is a pointer to
|
||||||
|
the Notepad UI class. A member variable is associated with a specific
|
||||||
|
class, and accessible for all its methods.
|
||||||
|
|
||||||
|
\snippet tutorials/notepad/notepad.h 6
|
||||||
|
|
||||||
|
\section2 Notepad Source File
|
||||||
|
|
||||||
|
The source file that the wizard generated for the Notepad class looks
|
||||||
|
as follows:
|
||||||
|
|
||||||
|
\quotefromfile tutorials/notepad/notepad.cpp
|
||||||
|
\skipto notepad.h
|
||||||
|
\printuntil ui->textEdit->setFont(font)
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
|
The following lines include the Notepad class header file that was
|
||||||
|
generated by the wizard and the UI header file that was generated
|
||||||
|
by the \c uic tool:
|
||||||
|
|
||||||
|
\quotefromfile tutorials/notepad/notepad.cpp
|
||||||
|
\skipto notepad.h
|
||||||
|
\printuntil ui_notepad
|
||||||
|
|
||||||
|
The following line defines the \c {Notepad} constructor:
|
||||||
|
|
||||||
|
\skipto Notepad::Notepad
|
||||||
|
\printline Notepad::Notepad
|
||||||
|
|
||||||
|
The following line calls the QMainWindow constructor, which is
|
||||||
|
the base class for the Notepad class:
|
||||||
|
|
||||||
|
\printline QMainWindow
|
||||||
|
|
||||||
|
The following line creates the UI class instance and assigns it to
|
||||||
|
the \c ui member:
|
||||||
|
|
||||||
|
\printline ui(new
|
||||||
|
|
||||||
|
The following line sets up the UI:
|
||||||
|
|
||||||
|
\quotefromfile tutorials/notepad/notepad.cpp
|
||||||
|
\skipto ui->setupUi
|
||||||
|
\printline ui->setupUi(this)
|
||||||
|
|
||||||
|
In the destructor, we delete the \c ui:
|
||||||
|
|
||||||
|
\skipto Notepad::~Notepad
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
|
In order to have the text edit field occupy the whole screen, we add
|
||||||
|
\c setCentralWidget to the main window.
|
||||||
|
|
||||||
|
\quotefromfile tutorials/notepad/notepad.cpp
|
||||||
|
\skipto Notepad::Notepad(QWidget *parent)
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
|
\section2 Project File
|
||||||
|
|
||||||
|
The wizard generates the following project file, \c {notepad.pro}, for
|
||||||
|
us:
|
||||||
|
|
||||||
|
\quotefile tutorials/notepad/notepad.pro
|
||||||
|
|
||||||
|
The project file specifies the application name and the \c qmake
|
||||||
|
template to use for generating the project, as well as the source,
|
||||||
|
header, and UI files included in the project.
|
||||||
|
|
||||||
|
You could also use \c qmake's \c -project option to generate the \.pro
|
||||||
|
file. Although, in that case, you have to remember to add the line
|
||||||
|
\c{QT += widgets} to the generated file in order to link against the
|
||||||
|
Qt Widgets Module.
|
||||||
|
|
||||||
|
\b{Learn More}
|
||||||
|
|
||||||
|
\table
|
||||||
|
\header
|
||||||
|
\li About
|
||||||
|
\li Here
|
||||||
|
\row
|
||||||
|
\li Using Qt Designer
|
||||||
|
\li \l{Qt Designer Manual}
|
||||||
|
\row
|
||||||
|
\li Layouts
|
||||||
|
\li \l{Layout Management},
|
||||||
|
\l{Widgets and Layouts},
|
||||||
|
\l{Layout Examples}
|
||||||
|
\row
|
||||||
|
\li The widgets that come with Qt
|
||||||
|
\li \l{Qt Widget Gallery}
|
||||||
|
\row
|
||||||
|
\li Main windows and main window classes
|
||||||
|
\li \l{Application Main Window},
|
||||||
|
\l{Main Window Examples}
|
||||||
|
\row
|
||||||
|
\li QObjects and the Qt Object model (This is essential to
|
||||||
|
understand Qt)
|
||||||
|
\li \l{Object Model}
|
||||||
|
\row
|
||||||
|
\li qmake and the Qt build system
|
||||||
|
\li \l{qmake Manual}
|
||||||
|
\endtable
|
||||||
|
|
||||||
|
\section1 Adding User Interaction
|
||||||
|
|
||||||
|
|
||||||
|
To add functionality to the editor, we start by adding menu items
|
||||||
|
and buttons on a toolbar.
|
||||||
|
|
||||||
|
Click on "Type Here", and add the options New, Open, Save, Save as,
|
||||||
|
Print and Exit. This creates 5 lines in the Action Editor below.
|
||||||
|
To connect the actions to slots, right-click an action and select
|
||||||
|
Go to slot > triggered(), and complete the code for that given slot.
|
||||||
|
|
||||||
|
If we also want to add the actions to a toolbar, we can assign an
|
||||||
|
icon to each QAction, and then drag the QAction to the toolbar. You
|
||||||
|
assign an icon by entering an icon name in the Icon property of the
|
||||||
|
action concerned. When the QAction has been dragged to the toolbar,
|
||||||
|
clicking the icon will launch the associated slot.
|
||||||
|
|
||||||
|
Complete the method \c on_actionNew_triggered():
|
||||||
|
|
||||||
|
\quotefromfile tutorials/notepad/notepad.cpp
|
||||||
|
\skipto on_actionNew_triggered()
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
|
\c current_file is a global variable containing the file presently
|
||||||
|
being edited.
|
||||||
|
It is defined in the private part of notepad.h:
|
||||||
|
|
||||||
|
\quotefromfile tutorials/notepad/notepad.h
|
||||||
|
\skipto private:
|
||||||
|
\printuntil currentFile;
|
||||||
|
|
||||||
|
\c clear() clears the text buffer.
|
||||||
|
|
||||||
|
\section2 Opening a file
|
||||||
|
|
||||||
|
In \c notepad.ui, right click on \c actionOpen and select \c {Go to
|
||||||
|
slot}
|
||||||
|
|
||||||
|
Complete method \c on_actionOpen_triggered().
|
||||||
|
|
||||||
|
\quotefromfile tutorials/notepad/notepad.cpp
|
||||||
|
\skipto on_actionOpen_triggered()
|
||||||
|
\printuntil file.close
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
|
|
||||||
|
\c QFileDialog::getOpenFileName opens a dialog enabling you to select
|
||||||
|
a file. QFile object \c myfile has the selected \c file_name as
|
||||||
|
parameter. We store the selected file also into the global variable
|
||||||
|
\c current_file for later purposes. We open the file with \c file.open
|
||||||
|
as a readonly text file. If it cannot be opened, a warning is issued,
|
||||||
|
and the program stops.
|
||||||
|
|
||||||
|
We define a QTextStream \c instream for parameter \c myfile.
|
||||||
|
The contents of file \c myfile is copied into QString \a text.
|
||||||
|
\c setText(text) fille the buffer of our editor with \c text.
|
||||||
|
|
||||||
|
\c section2 Saving a file
|
||||||
|
|
||||||
|
We create the method for saving a file in the same way as for
|
||||||
|
\l {Opening a file}, by right clicking on \c actionSave, and
|
||||||
|
selecting \c {Go to Slot}.
|
||||||
|
|
||||||
|
\skipto Notepad::on_actionSave_triggered
|
||||||
|
\printuntil file.close
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
|
QFile object \c myfile is linked to global variable \c current_file,
|
||||||
|
the variable that contains the file we were working with.
|
||||||
|
If we cannot open \c myfile, an error message is issued and the
|
||||||
|
method stops. We create a QTextStream \c outstream. The contents
|
||||||
|
of the editor buffer is converted to plain text, and then written
|
||||||
|
to \c outstream.
|
||||||
|
|
||||||
|
\section2 Saving a file with \c {Save as}
|
||||||
|
|
||||||
|
\skipto Notepad::on_actionSave_as_triggered
|
||||||
|
\printuntil file.close
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
|
This is the same procedure as for \c {Saving a file}, the only
|
||||||
|
difference being that here you need to enter a new file name for
|
||||||
|
the file to be created.
|
||||||
|
|
||||||
|
|
||||||
|
\section2 Print a File
|
||||||
|
|
||||||
|
If you want to use print functionalities, you need to add
|
||||||
|
\c printsupport to the project file:
|
||||||
|
|
||||||
|
\badcode
|
||||||
|
QT += printsupport
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
We declare a QPrinter object called \c printer.
|
||||||
|
We launch a printer dialog box and store the selected printer in
|
||||||
|
object \c printer. If we clicked on \c Cancel and did not select
|
||||||
|
a printer, the methods returns. The actual printer command is given
|
||||||
|
with \a ui->textEdit->print with our QPrinter object as parameter.
|
||||||
|
|
||||||
|
\section2 Select a Font
|
||||||
|
|
||||||
|
\skipto Notepad::on_actionFont_triggered
|
||||||
|
\printuntil ui->textEdit->setFont
|
||||||
|
\printline }
|
||||||
|
|
||||||
|
We declare a boolean indicating if we did select a font with
|
||||||
|
QFontDialog. If so, we set the font with \c ui->textEdit->setFont(myfont).
|
||||||
|
|
||||||
|
\section2 Copy, Cut, Paste, Undo, and Redo
|
||||||
|
|
||||||
|
If you select some text, and want to copy it to the clipboard,
|
||||||
|
you call the appropriate method of ui->textEdit. The same counts
|
||||||
|
for cut, paste, undo, and redo.
|
||||||
|
|
||||||
|
This table shows the method name to use.
|
||||||
|
|
||||||
|
\table
|
||||||
|
\header
|
||||||
|
\li Task
|
||||||
|
\li Method called
|
||||||
|
\row
|
||||||
|
\li Copy
|
||||||
|
\li ui->textEdit->copy()
|
||||||
|
\row
|
||||||
|
\li Cut
|
||||||
|
\li ui->textEdit->cut()
|
||||||
|
\row
|
||||||
|
\li Paste
|
||||||
|
\li ui->textEdit->paste()
|
||||||
|
\row
|
||||||
|
\li Undo
|
||||||
|
\li ui->textEdit->undo()
|
||||||
|
\row
|
||||||
|
\li Redo
|
||||||
|
\li ui->textEdit->redo()
|
||||||
|
\endtable
|
||||||
|
|
||||||
|
\b{Learn More}
|
||||||
|
|
||||||
|
\table
|
||||||
|
\header
|
||||||
|
\li About
|
||||||
|
\li Here
|
||||||
|
\row
|
||||||
|
\li MDI applications
|
||||||
|
\li QMdiArea,
|
||||||
|
\l{MDI Example}
|
||||||
|
\row
|
||||||
|
\li Files and I/O devices
|
||||||
|
\li QFile, QIODevice
|
||||||
|
\row
|
||||||
|
\li tr() and internationalization
|
||||||
|
\li \l{Qt Linguist Manual},
|
||||||
|
\l{Writing Source Code for Translation},
|
||||||
|
\l{Internationalization with Qt}
|
||||||
|
\endtable
|
||||||
|
|
||||||
|
\section1 Building and Running Notepad
|
||||||
|
|
||||||
|
Now that you have all the necessary files, select \b Build >
|
||||||
|
\b {Build Project Notepad} to build and run the application. Qt
|
||||||
|
Creator uses \c qmake and \c make to create an executable in the
|
||||||
|
directory specified in the build settings of the project and runs
|
||||||
|
it.
|
||||||
|
|
||||||
|
\section2 Building and Running from the Command Line
|
||||||
|
|
||||||
|
To build the application from the command line, switch to the
|
||||||
|
directory in which you have the \c .cpp file of the application
|
||||||
|
and add the project file (suffixed .pro) described earlier. The
|
||||||
|
following shell commands then build the application:
|
||||||
|
|
||||||
|
\badcode
|
||||||
|
qmake
|
||||||
|
make (or nmake on Windows)
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
The commands create an executable in the project directory. The
|
||||||
|
\c qmake tool reads the project file and produces a \c Makefile
|
||||||
|
with instructions on how to build the application.
|
||||||
|
The \c make tool (or the \c nmake tool) then reads the \c Makefile
|
||||||
|
and produces the executable binary.
|
||||||
|
*/
|
BIN
examples/widgets/tutorials/notepad/images/copy.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
examples/widgets/tutorials/notepad/images/create.png
Normal file
After Width: | Height: | Size: 459 B |
BIN
examples/widgets/tutorials/notepad/images/cut.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
examples/widgets/tutorials/notepad/images/edit_redo.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
examples/widgets/tutorials/notepad/images/edit_undo.png
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
examples/widgets/tutorials/notepad/images/exit.png
Normal file
After Width: | Height: | Size: 379 B |
BIN
examples/widgets/tutorials/notepad/images/font.png
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
examples/widgets/tutorials/notepad/images/info.png
Normal file
After Width: | Height: | Size: 557 B |
BIN
examples/widgets/tutorials/notepad/images/new.png
Normal file
After Width: | Height: | Size: 7.2 KiB |
BIN
examples/widgets/tutorials/notepad/images/open.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
examples/widgets/tutorials/notepad/images/paste.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
examples/widgets/tutorials/notepad/images/pencil.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
examples/widgets/tutorials/notepad/images/print.png
Normal file
After Width: | Height: | Size: 331 B |
BIN
examples/widgets/tutorials/notepad/images/save.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
examples/widgets/tutorials/notepad/images/save_as.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
61
examples/widgets/tutorials/notepad/main.cpp
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "notepad.h"
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication EditorApp(argc, argv);
|
||||||
|
Notepad Editor;
|
||||||
|
Editor.show();
|
||||||
|
|
||||||
|
return EditorApp.exec();
|
||||||
|
}
|
182
examples/widgets/tutorials/notepad/notepad.cpp
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <QFile>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QTextStream>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QPrintDialog>
|
||||||
|
#include <QPrinter>
|
||||||
|
#include <QFont>
|
||||||
|
#include <QFontDialog>
|
||||||
|
|
||||||
|
#include "notepad.h"
|
||||||
|
#include "ui_notepad.h"
|
||||||
|
|
||||||
|
Notepad::Notepad(QWidget *parent) :
|
||||||
|
QMainWindow(parent),
|
||||||
|
ui(new Ui::Notepad)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
this->setCentralWidget(ui->textEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
Notepad::~Notepad()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionNew_triggered()
|
||||||
|
{
|
||||||
|
currentFile.clear();
|
||||||
|
ui->textEdit->setText(QString());
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionOpen_triggered()
|
||||||
|
{
|
||||||
|
QString fileName = QFileDialog::getOpenFileName(this, "Open the file");
|
||||||
|
QFile file(fileName);
|
||||||
|
currentFile = fileName;
|
||||||
|
if (!file.open(QIODevice::ReadOnly | QFile::Text)) {
|
||||||
|
QMessageBox::warning(this, "Warning", "Cannot open file: " + file.errorString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setWindowTitle(fileName);
|
||||||
|
QTextStream in(&file);
|
||||||
|
QString text = in.readAll();
|
||||||
|
ui->textEdit->setText(text);
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionSave_triggered()
|
||||||
|
{
|
||||||
|
QString fileName;
|
||||||
|
// If we don't have a filename from before, get one.
|
||||||
|
if (currentFile.isEmpty()) {
|
||||||
|
fileName = QFileDialog::getSaveFileName(this, "Save");
|
||||||
|
currentFile = fileName;
|
||||||
|
} else {
|
||||||
|
fileName = currentFile;
|
||||||
|
}
|
||||||
|
QFile file(fileName);
|
||||||
|
if (!file.open(QIODevice::WriteOnly | QFile::Text)) {
|
||||||
|
QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setWindowTitle(fileName);
|
||||||
|
QTextStream out(&file);
|
||||||
|
QString text = ui->textEdit->toPlainText();
|
||||||
|
out << text;
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionSave_as_triggered()
|
||||||
|
{
|
||||||
|
QString fileName = QFileDialog::getSaveFileName(this, "Save as");
|
||||||
|
QFile file(fileName);
|
||||||
|
|
||||||
|
if (!file.open(QFile::WriteOnly | QFile::Text)) {
|
||||||
|
QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
currentFile = fileName;
|
||||||
|
setWindowTitle(fileName);
|
||||||
|
QTextStream out(&file);
|
||||||
|
QString text = ui->textEdit->toPlainText();
|
||||||
|
out << text;
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionPrint_triggered()
|
||||||
|
{
|
||||||
|
QPrinter printDev;
|
||||||
|
QPrintDialog dialog(&printDev, this);
|
||||||
|
if (dialog.exec() == QDialog::Rejected)
|
||||||
|
return;
|
||||||
|
ui->textEdit->print(&printDev);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionExit_triggered()
|
||||||
|
{
|
||||||
|
QCoreApplication::quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionCopy_triggered()
|
||||||
|
{
|
||||||
|
ui->textEdit->copy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionCut_triggered()
|
||||||
|
{
|
||||||
|
ui->textEdit->cut();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionPaste_triggered()
|
||||||
|
{
|
||||||
|
ui->textEdit->paste();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionUndo_triggered()
|
||||||
|
{
|
||||||
|
ui->textEdit->undo();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionRedo_triggered()
|
||||||
|
{
|
||||||
|
ui->textEdit->redo();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notepad::on_actionFont_triggered()
|
||||||
|
{
|
||||||
|
bool fontSelected;
|
||||||
|
QFont font = QFontDialog::getFont(&fontSelected, this);
|
||||||
|
if (fontSelected)
|
||||||
|
ui->textEdit->setFont(font);
|
||||||
|
}
|
114
examples/widgets/tutorials/notepad/notepad.h
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef NOTEPAD_H
|
||||||
|
#define NOTEPAD_H
|
||||||
|
|
||||||
|
//! [all]
|
||||||
|
//! [1]
|
||||||
|
#include <QMainWindow>
|
||||||
|
//! [1]
|
||||||
|
|
||||||
|
//! [2]
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
namespace Ui {
|
||||||
|
class Notepad;
|
||||||
|
}
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
//! [2]
|
||||||
|
|
||||||
|
//! [3]
|
||||||
|
class Notepad : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
//! [3]
|
||||||
|
|
||||||
|
//! [4]
|
||||||
|
public:
|
||||||
|
explicit Notepad(QWidget *parent = 0);
|
||||||
|
//! [4]
|
||||||
|
//! [5]
|
||||||
|
~Notepad();
|
||||||
|
//! [5]
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_actionNew_triggered();
|
||||||
|
|
||||||
|
void on_actionOpen_triggered();
|
||||||
|
|
||||||
|
void on_actionSave_triggered();
|
||||||
|
|
||||||
|
void on_actionSave_as_triggered();
|
||||||
|
|
||||||
|
void on_actionPrint_triggered();
|
||||||
|
|
||||||
|
void on_actionExit_triggered();
|
||||||
|
|
||||||
|
void on_actionCopy_triggered();
|
||||||
|
|
||||||
|
void on_actionCut_triggered();
|
||||||
|
|
||||||
|
void on_actionPaste_triggered();
|
||||||
|
|
||||||
|
void on_actionUndo_triggered();
|
||||||
|
|
||||||
|
void on_actionRedo_triggered();
|
||||||
|
|
||||||
|
void on_actionFont_triggered();
|
||||||
|
|
||||||
|
//! [6]
|
||||||
|
private:
|
||||||
|
Ui::Notepad *ui;
|
||||||
|
QString currentFile;
|
||||||
|
//! [6]
|
||||||
|
};
|
||||||
|
//! [all]
|
||||||
|
|
||||||
|
#endif // NOTEPAD_H
|
20
examples/widgets/tutorials/notepad/notepad.pro
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
TEMPLATE = app
|
||||||
|
TARGET = notepad
|
||||||
|
|
||||||
|
QT += printsupport
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
main.cpp\
|
||||||
|
notepad.cpp
|
||||||
|
|
||||||
|
HEADERS += notepad.h
|
||||||
|
|
||||||
|
FORMS += notepad.ui
|
||||||
|
|
||||||
|
RESOURCES += \
|
||||||
|
notepad.qrc
|
||||||
|
|
||||||
|
# install
|
||||||
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tutorials/notepad
|
||||||
|
INSTALLS += target
|
||||||
|
|
19
examples/widgets/tutorials/notepad/notepad.qrc
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/">
|
||||||
|
<file>images/copy.png</file>
|
||||||
|
<file>images/create.png</file>
|
||||||
|
<file>images/cut.png</file>
|
||||||
|
<file>images/edit_redo.png</file>
|
||||||
|
<file>images/edit_undo.png</file>
|
||||||
|
<file>images/exit.png</file>
|
||||||
|
<file>images/font.png</file>
|
||||||
|
<file>images/info.png</file>
|
||||||
|
<file>images/new.png</file>
|
||||||
|
<file>images/open.png</file>
|
||||||
|
<file>images/paste.png</file>
|
||||||
|
<file>images/pencil.png</file>
|
||||||
|
<file>images/print.png</file>
|
||||||
|
<file>images/save.png</file>
|
||||||
|
<file>images/save_as.png</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
196
examples/widgets/tutorials/notepad/notepad.ui
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Notepad</class>
|
||||||
|
<widget class="QMainWindow" name="Notepad">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>524</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Notepad</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralWidget">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QTextEdit" name="textEdit"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menuBar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>524</width>
|
||||||
|
<height>25</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<widget class="QMenu" name="menuFile">
|
||||||
|
<property name="title">
|
||||||
|
<string>File</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="actionNew"/>
|
||||||
|
<addaction name="actionOpen"/>
|
||||||
|
<addaction name="actionSave"/>
|
||||||
|
<addaction name="actionSave_as"/>
|
||||||
|
<addaction name="actionPrint"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionExit"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenu" name="menuEdit">
|
||||||
|
<property name="title">
|
||||||
|
<string>Edit</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="actionCopy"/>
|
||||||
|
<addaction name="actionCut"/>
|
||||||
|
<addaction name="actionPaste"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionUndo"/>
|
||||||
|
<addaction name="actionRedo"/>
|
||||||
|
<addaction name="actionFont"/>
|
||||||
|
</widget>
|
||||||
|
<addaction name="menuFile"/>
|
||||||
|
<addaction name="menuEdit"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QToolBar" name="mainToolBar">
|
||||||
|
<attribute name="toolBarArea">
|
||||||
|
<enum>TopToolBarArea</enum>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="toolBarBreak">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<addaction name="actionNew"/>
|
||||||
|
<addaction name="actionOpen"/>
|
||||||
|
<addaction name="actionSave"/>
|
||||||
|
<addaction name="actionSave_as"/>
|
||||||
|
<addaction name="actionPrint"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionCopy"/>
|
||||||
|
<addaction name="actionCut"/>
|
||||||
|
<addaction name="actionPaste"/>
|
||||||
|
<addaction name="actionUndo"/>
|
||||||
|
<addaction name="actionRedo"/>
|
||||||
|
<addaction name="actionFont"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionExit"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusBar"/>
|
||||||
|
<action name="actionNew">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="notepad.qrc">
|
||||||
|
<normaloff>:/images/new.png</normaloff>:/images/new.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>New</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionOpen">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/images/open.png</normaloff>:/images/open.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Open</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionSave">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/images/save.png</normaloff>:/images/save.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionSave_as">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/images/save_as.png</normaloff>:/images/save_as.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save as</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionPrint">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/images/print.png</normaloff>:/images/print.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Print</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionExit">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/images/exit.png</normaloff>:/images/exit.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Exit</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionCopy">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/images/copy.png</normaloff>:/images/copy.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Copy</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionCut">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/images/cut.png</normaloff>:/images/cut.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Cut</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionPaste">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/images/paste.png</normaloff>:/images/paste.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Paste</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionUndo">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/images/edit_undo.png</normaloff>:/images/edit_undo.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Undo</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionRedo">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/images/edit_redo.png</normaloff>:/images/edit_redo.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Redo</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionFont">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/images/font.png</normaloff>:/images/font.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Font</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
</widget>
|
||||||
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
|
<resources>
|
||||||
|
<include location="notepad.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
@ -1,2 +1,2 @@
|
|||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
SUBDIRS += addressbook widgets modelview gettingStarted
|
SUBDIRS += addressbook widgets modelview gettingStarted notepad
|
||||||
|