diff options
Diffstat (limited to 'doc/src')
33 files changed, 985 insertions, 1851 deletions
diff --git a/doc/src/configure.qdoc b/doc/src/configure.qdoc index d3fbf87a..eb7f4c4c 100644 --- a/doc/src/configure.qdoc +++ b/doc/src/configure.qdoc @@ -188,7 +188,7 @@ The \c -platform option sets the host platform and the compiler for building the Qt sources. The list of supported platforms and compilers is found in - the \l{Community Supported Platforms}{supported platforms} page while the + the \l{Supported Platforms}{supported platforms} page while the full list is available in \e{qtbase/mkspecs} directory. For example, on Ubuntu Linux systems, Qt can be compiled by several diff --git a/doc/src/developmenttools.qdoc b/doc/src/developmenttools.qdoc index fb6ba550..dfdf1b8e 100644 --- a/doc/src/developmenttools.qdoc +++ b/doc/src/developmenttools.qdoc @@ -99,5 +99,8 @@ \row \li \l{Qt VS Tools} \li Intended for developers who wish to develop Qt applications using the Visual Studio IDE instead of Qt Creator. + \row \li \l{Qt Distance Field Generator Manual}{Qt Distance Field Generator} + \li A tool that generates distance fields to improve load times for a + text-heavy Qt Quick user interface. \endtable */ diff --git a/doc/src/getting-started/gettingstarted.qdoc b/doc/src/getting-started/gettingstarted.qdoc index e12441c3..cffa9123 100644 --- a/doc/src/getting-started/gettingstarted.qdoc +++ b/doc/src/getting-started/gettingstarted.qdoc @@ -30,10 +30,26 @@ \title Getting Started with Qt \brief A quick guide for developers - \section1 Install Qt + \section1 Installing Qt - You can install the Qt Framework and tools by using an online or offline - installer or by building the source packages yourself. + You can install the Qt Framework and tools by using an \l{Online Installation}{online} + or \l{Offline Installation}{offline} installer, or by + \l{Building Qt Sources}{building the source packages yourself}. + + The installers allow you to download and install the following + components: + + \list + \li Qt libraries, prebuilt for a particular development platform (operating + system and compiler) + \li Qt Creator integrated development environment (IDE) + \li Reference Documentation and examples + \li Qt in source code form (needed only if you want to build the framework and + tools yourself) + \li Add-On components that are relevant for different platforms + \endlist + + \section2 Online Installation In the \e{online installer}, you can select commercial or open source versions of Qt, tools, and Add-On components to install. Using the online @@ -41,29 +57,19 @@ retrieves the license attached to the account from a server and provides a list of available components corresponding to the license. + The online installer is available from the Qt \l Downloads page. + + \section2 Offline Installation + An \e{offline installer} is a single package that contains all of Qt and Add-Ons relevant for a target platform. Users with a commercial license can either sign in with their Qt account or with their Qt license key during the installation process. The license key is available in the \l {Qt Account} Web portal. - You can download Qt 5 installers from the \l Downloads page. + The offline installer is available \l{https://www.qt.io/offline-installer}{here}. - You can use the Qt installers to download and install the following - components: - - \list - \li Qt libraries, prebuilt for a particular development platform (operating - system and compiler) - \li Qt Creator integrated development environment (IDE) - \li Reference Documentation and examples - \li Qt in source code form (needed only if you want to build the framework and - tools yourself) - \li Add-On components that are relevant for different platforms - \endlist - - After downloading, start the installer like any executable on the - development platform. + \section2 Installation Process To run the installer, you need a Qt Account. You can use your Qt Account credentials to sign-in to all Qt services, including the forums and wiki. @@ -73,22 +79,23 @@ To complete the installation, select the components that you want to install and follow the instructions of the installation program. - Use the Maintenance Tool under \e{<install_dir>} to add components and to - update or remove installed components. + The following YouTube video gives a complete walk-through of the + installation process: - \note From Qt 5.11, \l{QDoc Manual}{QDoc}, the Qt documentation generation - tool, requires \l{http://clang.llvm.org}{clang} from LLVM 3.9 or greater for - parsing C++ code. If you intend to use \l{QDoc Manual}{QDoc} to generate - documentation for your own projects, or if you intend to build the Qt - documentation locally from your Qt sources, see \l{Getting Started with QDoc} - for details. + \youtube I5jasWrsxT0 + + \section2 Updating or Removing Qt + + Once Qt is installed, you can use the Maintenance Tool under \e{<install_dir>} + to add components and to update or remove installed components. \section2 Platform Requirements - Developing applications on different platforms are covered in the platform - pages. + Specific requirements and instructions for developing applications on different + platforms are covered in the platform pages. + \list - \li \l{Getting Started with Qt for Android}{Android} + \li \l{Qt for Android}{Android} \li \l{Qt for iOS}{iOS} \li \l{Qt for Windows}{Windows} \li \l{Qt for Linux/X11}{Linux/X11} @@ -96,7 +103,7 @@ \li \l{Qt for WinRT}{Windows Runtime} \endlist - For more information, visit the \l{Community Supported Platforms} + For more information, visit the \l{Supported Platforms} {supported platforms} page. \section1 Create Your First Applications diff --git a/doc/src/getting-started/gettingstartedqml.qdoc b/doc/src/getting-started/gettingstartedqml.qdoc index cd6cedf1..28f57a8a 100644 --- a/doc/src/getting-started/gettingstartedqml.qdoc +++ b/doc/src/getting-started/gettingstartedqml.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2018 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the documentation of the Qt Toolkit. @@ -26,1063 +26,257 @@ ****************************************************************************/ /*! - \page gettingstartedqml.html + \example tutorials/alarms \title Getting Started Programming with Qt Quick + \brief A tutorial for Qt Quick based on an alarms application + + This tutorial shows how to develop a simple alarm application as + an introduction to Qt Quick and Qt Quick Controls2. + + This application is similar to the alarm application usually + found on an Android phone. Its features let you enter, edit, + or delete alarms. An alarm can trigger on a given date, and you + can set it to repeat on a series of subsequent days. + + The main screen shows the list of saved alarms: + + \image mainscreen.png "Alarms application" + + The detail screen lets you edit or delete existing alarms: + + \image detailscreen.png "Detail screen" + + The dialog screen is used for adding new alarms. It pops up + when you click on the "+" RoundButton on the bottom of the main + screen: + + \image addalarms.png "Add alarms" + + The source files are located in the qtdoc repository. + You can either fetch the Qt 5 sources from the 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 Alarms Project + + This section shows how to create the project in Qt Creator. It discusses + the files generated automatically by Qt Creator, and the two files + the programmer has to create in Qt Creator or some other editor. + The latter two files are included with the source code for this + tutorial. + + \section1 Qt Creator - Welcome to the world of \b QML, the declarative UI language. In this Getting - Started guide, we will create a simple text editor application using QML. - After reading this guide, you should be ready to develop your own applications - using QML and Qt C++. + 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. + + To create the Alarms project, select \uicontrol{File} > + \uicontrol{New File or Project} > \uicontrol{Application} > + \uicontrol{Qt Quick Application - Empty} > \uicontrol{Choose}. + Type "alarms" in the \b{Name} field, and follow the instructions + of the wizard. - \section1 QML to Build User Interfaces + \image alarms2.png "Qt Creator New File or Project dialog" + + \image alarms3.png "Project Location" - The application we are building is a simple text editor that will load, save, - and perform some text manipulation. This guide will consist of two parts. The - first part will involve designing the application layout and behaviors using - declarative language in QML. For the second part, file loading and saving will - be implemented using Qt C++. Using - \l {The Meta-Object System}{Qt's Meta-Object System}, we can expose C++ functions - as properties that \l{QML Object Types}{QML object types} can use. Utilizing QML and Qt C++, we can - efficiently decouple the interface logic from the application logic. + The Qt Quick application wizard creates a project that contains + the following source files: - \image qml-texteditor5_editmenu.png + \table + \header + \li Source file + \li Purpose + \row + \li alarms.pro + \li The project file + \row + \li main.cpp + \li The main C++ code file for the application. + \row + \li qml.qrc + \li The resource file, which contains the names of the + source files, except main.cpp and the project file. + \endtable - The complete source code is in the \c{examples/quick/tutorials/gettingStartedQml} - directory. If you wish to see how the finalized application looks like, you - can skip to chapter \l {Running the Text Editor}. + The wizard generates the code in the main.cpp file below. + This code block enables High DPI scaling and declares \c app + and \c engine. The engine then loads our main QML file. - The C++ portion of this tutorial assumes that the reader possesses basic knowledge of - Qt's compilation procedures. + \quotefromfile tutorials/alarms/main.cpp + \skipto main + \printuntil } - Tutorial chapters: - \list 1 - \li \l {Defining a Button and a Menu} - \li \l {Implementing a Menu Bar} - \li \l {Building a Text Editor} - \li \l {Decorating the Text Editor} - \li \l {Extending QML using Qt C++} - \endlist + \section1 Additional source files - Information about QML, such as syntax and features, is included in the - \l{The QML Reference}. + \table + \header + \li Source file + \li Purpose + \row + \li \c qtquickcontrols2.conf + \li Selects the \c Material style with the \c Dark theme. + \row + \li \c main.qml + \li The QML code that links AlarmDialog.qml, AlarmModel.qml, + AlarmDelegate.qml and TumblerDelegate.qml + \row + \li \c AlarmDialog.qml + \li Defines the dialog for adding new alarms. + \row + \li \c AlarmDelegate.qml + \li Defines the layout of the main screen of the app. + \row + \li \c AlarmModel.qml + \li Defines the ListModel used for storing the alarms' data. + \row + \li \c TumblerDelegate.qml + \li Defines the graphical layout of the Tumblers + \endtable - \section1 Defining a Button and a Menu - \section2 Basic Component - a Button + \section2 \c qtquickcontrols2.conf - We start our text editor by building a button. Functionally, a button has a mouse - sensitive area and a label. Buttons perform actions when a user presses the button. + The following snippet shows how to set the \c Dark theme in the + \c Material style: - In QML, the basic visual item is the \l Rectangle type. The - \c Rectangle \l{QML Object Types}{QML object type} has - \l{Property Binding}{QML properties} to control its appearance and location. + \quotefile tutorials/alarms/qtquickcontrols2.conf - \code - import QtQuick 2.3 - - Rectangle { - id: simpleButton - color: "grey" - width: 150; height: 75 - - Text { - id: buttonLabel - anchors.centerIn: parent - text: "button label" - } - } - \endcode - - First, the \c {import QtQuick 2.3} statement allows the - \l{Prototyping with qmlscene}{qmlscene} tool to import the QML types we will later use. - This line must exist for every QML file. Notice that the version of Qt modules is - included in the import statement. - - This simple rectangle has a unique identifier, \c simpleButton, which is bound to the - \c id property. The \c Rectangle object's properties are bound to values by listing the - property, followed by a colon, then the value. In the code sample, the color \c grey - is bound to the Rectangle's \c color property. Similarly, we bind the \c width - and \c height of the Rectangle. - - The \l Text type is a non-editable text field. We name this object \c buttonLabel. To set - the string content of the Text field, we bind a value to the \c text property. The label - is contained within the Rectangle and in order to center it in the middle, we assign the - \c anchors of the Text object to its parent, which is called \c simpleButton. Anchors may - bind to other items' anchors, allowing layout assignments simpler. - - We shall save this code as \c SimpleButton.qml. Running \c qmlscene with the file as the - argument will display the grey rectangle with a text label. - - \image qml-texteditor1_simplebutton.png - - To implement the button click functionality, we can use QML's event handling. QML's event - handling is very similar to \l {Signals & Slots}{Qt's signal and slot} mechanism. Signals - are emitted and the connected slot is called. - - \code - Rectangle { - id: simpleButton - ... - - MouseArea { - id: buttonMouseArea - - // Anchor all sides of the mouse area to the rectangle's anchors - anchors.fill: parent - // onClicked handles valid mouse button clicks - onClicked: console.log(buttonLabel.text + " clicked") - } - } - \endcode - - We include a \l MouseArea object in our simpleButton. \c MouseArea objects describe - the interactive area where mouse movements are detected. For our button, we anchor the - whole \c MouseArea to its parent, which is \c simpleButton. The \c anchors.fill syntax is - one way of accessing a specific property called \c fill inside a group of properties - called \c anchors. QML uses \l {Positioning with Anchors}{anchor-based layouts} where - items can anchor to another item, creating robust layouts. - - The \c MouseArea has many signal handlers that are called during mouse movements within - the specified \c MouseArea boundaries. One of them is \c onClicked and it is called - whenever the acceptable mouse button is clicked, the left click being the default. We - can bind actions to the onClicked handler. In our example, \c console.log() outputs text - whenever the mouse area is clicked. The function \c console.log() is a useful tool for - debugging purposes and for outputting text. - - The code in \c SimpleButton.qml is sufficient to display a button on the screen and - output text whenever it is clicked with a mouse. - - \code - Rectangle { - id: button - ... - - property color buttonColor: "lightblue" - property color onHoverColor: "gold" - property color borderColor: "white" - - signal buttonClick() - - onButtonClick: { - console.log(buttonLabel.text + " clicked") - } - - MouseArea{ - id: buttonMouseArea - onClicked: buttonClick() - hoverEnabled: true - onEntered: parent.border.color = onHoverColor - onExited: parent.border.color = borderColor - } - - // Determines the color of the button by using the conditional operator - color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor - } - \endcode - - A fully functioning button is in \c Button.qml. The code snippets in this article - have some code omitted, denoted by ellipses because they were either introduced - earlier in the previous sections or irrelevant to the current code discussion. - - Custom properties are declared using the \c {property type name} syntax. In the - code, the property \c buttonColor, of type \c color, is declared and bound to - the value \c{"lightblue"}. The \c buttonColor is later used in a conditional - operation to determine the button's fill color. Note that property value - assignment is possible using the \c= equals sign, in addition to value binding - using the \c : colon character. Custom properties allow internal items to be - accessible outside of the Rectangle's scope. There are basic - \l{QML Basic Types}{QML types} such as \c int, \c string, \c real, as well as - a type called \c variant. - - By binding the \c onEntered and \c onExited signal handlers to colors, the - button's border will turn yellow when the mouse hovers above the button and - reverts the color when the mouse exits the mouse area. - - A \c buttonClick() signal is declared in \c Button.qml by placing the \c signal - keyword in front of the signal name. All signals have their handlers automatically - created, their names starting with \c on. As a result, the \c onButtonClick is - \c buttonClick's handler. The \c onButtonClick is then assigned an action to - perform. In our button example, the \c onClicked mouse handler will simply call - \c onButtonClick, which displays a text. The \c onButtonClick enables outside - objects to access the \c {Button}'s mouse area easily. For example, items may - have more than one \c MouseArea declarations and a \c buttonClick signal can - make the distinction between the several \c MouseArea signal handlers better. - - We now have the basic knowledge to implement items in QML that can handle - basic mouse movements. We created a \c Text label inside a \c Rectangle, - customized its properties, and implemented behaviors that respond to mouse - movements. This idea of creating QML objects within objects is repeated - throughout the text editor application. - - This button is not useful unless used as a component to perform an action. - In the next section, we will soon create a menu containing several of these - buttons. - - \image qml-texteditor1_button.png - - \section2 Creating a Menu Page - - Up to this stage, we covered how to create objects and assign behaviors inside - a single QML file. In this section, we will cover how to import QML types and how - to reuse some of the created components to build other components. - - Menus display the contents of a list, each item having the ability to perform an action. - In QML, we can create a menu in several ways. First, we will create a menu containing - buttons which will eventually perform different actions. The menu code is in - \c FileMenu.qml. - - \code - import QtQuick 2.3 // Import the main Qt QML module - import "folderName" // import the contents of a folder - import "script.js" as Script // Import a Javascript file and name it as Script - \endcode - - The syntax shown above shows how to use the \c import keyword. This is required to - use JavaScript files, or QML files that are not within the same directory. Since - \c Button.qml is in the same directory as \c FileMenu.qml, we do not need to import - the \c Button.qml file to use it. We can directly create a \c Button object by declaring - \c Button{}, similar to a \c Rectangle{} declaration. - - \code - In FileMenu.qml: - - Row { - anchors.centerIn: parent - spacing: parent.width / 6 - - Button { - id: loadButton - buttonColor: "lightgrey" - label: "Load" - } - Button { - buttonColor: "grey" - id: saveButton - label: "Save" - } - Button { - id: exitButton - label: "Exit" - buttonColor: "darkgrey" - - onButtonClick: Qt.quit() - } - } - \endcode - - In \c FileMenu.qml, we declare three \c Button objects. They are declared - inside a \l Row type, a positioner that will position its children - along a vertical row. The \c Button declaration resides in Button.qml, - which is the same as the one we used in the previous section. - New property bindings can be declared within the newly created buttons, - effectively overwriting the properties set in \c Button.qml. The button - called \c exitButton will quit and close the window when it is clicked. - Note that the signal handler \c onButtonClick in \c Button.qml will be - called in addition to the \c onButtonClick handler in \c exitButton. - - \image qml-texteditor1_filemenu.png - - The \c Row declaration is declared in a \c Rectangle, creating a rectangle - container for the row of buttons. This additional rectangle creates an indirect - way of organizing the row of buttons inside a menu. - - The declaration of the edit menu is very similar at this stage. The menu has - buttons that have the labels: \c Copy, \c Paste, and \c {Select All}. - - \image qml-texteditor1_editmenu.png - - Armed with our knowledge of importing and customizing previously made - components, we may now combine these menu pages to create a menu bar, - consisting of buttons to select the menu, and look at how we may structure - data using QML. - - \section1 Implementing a Menu Bar - - Our text editor application will need a way to display menus using a menu bar. - The menu bar will switch the different menus and the user can choose which menu - to display. Menu switching implies that the menus need more structure than - merely displaying them in a row. QML uses models and views to structure data - and display the structured data. - - \section2 Using Data Models and Views - - QML has different \l{QML Data Models}{data views} that display - \l{QML Data Models}{data models}. Our menu bar will display the menus in a list, - with a header that displays a row of menu names. The list of menus are declared - inside a \l ObjectModel. The \c ObjectModel type contains items that already are - displayable, such as \c Rectangle objects. Other model types, like the - \l ListModel type, need a delegate to display their data. - - We declare two visual items in the \c menuListModel, the \c FileMenu and the - \c EditMenu. We customize the two menus and display them in a \l ListView. - The \c MenuBar.qml file contains the QML declarations and a simple edit menu is - defined in \c EditMenu.qml. - - \code - ObjectModel { - id: menuListModel - - FileMenu { - width: menuListView.width - height: menuBar.height - color: fileColor - } - - EditMenu { - color: editColor - width: menuListView.width - height: menuBar.height - } - } - \endcode - - The \l ListView type will display a model according to a delegate. The delegate - can display the model items in a \c Row object or in a grid. Our \c menuListModel - already has visible items, therefore, we do not need to declare a delegate. - - \code - ListView { - id: menuListView - - // Anchors are set to react to window anchors - anchors.fill: parent - anchors.bottom: parent.bottom - width: parent.width - height: parent.height - - // The model contains the data - model: menuListModel - - // Control the movement of the menu switching - snapMode: ListView.SnapOneItem - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickDeceleration: 5000 - highlightFollowsCurrentItem: true - highlightMoveDuration: 240 - highlightRangeMode: ListView.StrictlyEnforceRange - } - \endcode - - Additionally, \c ListView inherits from \l Flickable, making the list respond - to mouse drags and other gestures. The last portion of the code above sets - \c Flickable properties to create the desired flicking movement to our view. - In particular, the property \c highlightMoveDuration changes the duration of - the flick transition. A higher \c highlightMoveDuration value results in - slower menu switching. - - The \c ListView maintains the model items through an \c index and each visual - item in the model is accessible through the \c index, in the order of the - declaration. Changing the \c currentIndex effectively changes the highlighted - item in the \c ListView. The header of our menu bar exemplifies this effect. - There are two buttons in a row, both changing the current menu when clicked. - The \c fileButton changes the current menu to the file menu when clicked, - the \c index being \c 0 because \c FileMenu is declared first in the - \c menuListModel. Similarly, the \c editButton will change the current - menu to the \c EditMenu when clicked. - - The \c labelList rectangle has \c z value of \c 1, denoting that it is displayed - at the front of the menu bar. Items with higher \c z values are displayed in front - of items with lower \c z values. The default \c z value is \c 0. - - \code - Rectangle { - id: labelList - ... - z: 1 - - Row { - anchors.centerIn: parent - spacing: 40 - - Button { - label: "File" - id: fileButton - ... - onButtonClick: menuListView.currentIndex = 0 - } - - Button { - id: editButton - label: "Edit" - ... - onButtonClick: menuListView.currentIndex = 1 - } - } - } - \endcode - - The menu bar we just created can be flicked to access the menus or by clicking - on the menu names at the top. Switching menu screens feel intuitive and responsive. - - \image qml-texteditor2_menubar.png - - \section1 Building a Text Editor - - \section2 Declaring a TextArea - - Our text editor is not a text editor if it didn't contain an editable text area. - QML's \l TextEdit type allows the declaration of a multi-line editable text area. - \c TextEdit is different from the \l Text type, which doesn't allow the user to - directly edit the text. - - \code - TextEdit { - id: textEditor - anchors.fill: parent - width: parent.width - height: parent.height - color: "midnightblue" - focus: true - - wrapMode: TextEdit.Wrap - - onCursorRectangleChanged: flickArea.ensureVisible(cursorRectangle) - } - \endcode - - The editor has its font \c color property set and \c wrapMode set to wrap the text. - The \c TextEdit area is inside a flickable item that will scroll the text if the - text cursor is outside the visible area. The function \c ensureVisible() will - check if the cursor rectangle is outside the visible boundaries and move the - text area accordingly. QML uses Javascript syntax for its scripts, and as previously - mentioned, Javascript files can be imported and used within a QML file. - - \code - function ensureVisible(r) { - if (contentX >= r.x) - contentX = r.x; - else if (contentX + width <= r.x + r.width) - contentX = r.x + r.width - width; - if (contentY >= r.y) - contentY = r.y; - else if (contentY + height <= r.y + r.height) - contentY = r.y + r.height - height; - } - \endcode - - \section2 Combining Components for the Text Editor - - We are now ready to create the layout of our text editor using QML. The text - editor has two components, the menu bar we created and the text area. QML allows - us to reuse components, therefore making our code simpler, by importing components - and customizing when necessary. Our text editor splits the window into two; - one-third of the screen is dedicated to the menu bar and two-thirds of the screen - displays the text area. The menu bar is displayed in front of any other objects. - - \code - Rectangle { - id: screen - width: 1000 - height: 1000 - - // The screen is partitioned into the MenuBar and TextArea. - // One-third of the screen is assigned to the MenuBar - property int partition: height / 3 - - MenuBar { - id: menuBar - height: partition - width: parent.width - z: 1 - } - - TextArea { - id: textArea - anchors.bottom: parent.bottom - y: partition - color: "white" - width: parent.width - height: partition * 2 - } - } - \endcode - - By importing reusable components, our \c TextEditor code looks much simpler. - We can then customize the main application, without worrying about properties - that already have defined behaviors. Using this approach, application layouts - and UI components can be created easily. - - \image qml-texteditor3_texteditor.png - - \section1 Decorating the Text Editor - \section2 Implementing a Drawer Interface - - Our text editor looks simple and we need to decorate it. Using QML, we can declare - transitions and animate our text editor. Our menu bar is occupying one-third of the - screen and it would be nice to have it only appear when we want it. - - We can add a drawer interface, that will contract or expand the menu bar when clicked. - In our implementation, we have a thin rectangle that responds to mouse clicks. The - \c drawer, as well as the application, has two sates: the "drawer is open" state and - the "drawer is closed" state. The \c drawer item is a strip of rectangle with a small - height. There is a nested \l Image object declaring that an arrow icon will - be centered inside the drawer. The drawer assigns a state to the whole application, - with the identifier \c screen, whenever a user clicks the mouse area. - - \code - Rectangle { - id: drawer - height: 15 - - Image { - id: arrowIcon - source: "images/arrow.png" - anchors.horizontalCenter: parent.horizontalCenter - } - - MouseArea { - id: drawerMouseArea - anchors.fill: parent - - onClicked: { - if (screen.state == "DRAWER_CLOSED") - screen.state = "DRAWER_OPEN" - else if (screen.state == "DRAWER_OPEN") - screen.state = "DRAWER_CLOSED" - } - ... - } - } - \endcode - - A state is simply a collection of configurations and it is declared with the - \l State type. A list of states can be listed and bound to the \c states property. - In our application, the two states are called \c DRAWER_CLOSED and \c DRAWER_OPEN. - Item configurations are declared in \l PropertyChanges objects. In the - \c DRAWER_OPEN state, there are four items that will receive property changes. - The first target, \c menuBar, will change its \c y property to \c 0. Similarly, - the \c textArea will lower to a new position when the state is \c DRAWER_OPEN. - The \c textArea, the \c drawer, and the drawer's icon will undergo property - changes to meet the current state. - - \code - states:[ - State { - name: "DRAWER_OPEN" - PropertyChanges { target: menuBar; y: 0 } - PropertyChanges { target: textArea; y: partition + drawer.height } - PropertyChanges { target: drawer; y: partition } - PropertyChanges { target: arrowIcon; rotation: 180 } - }, - State { - name: "DRAWER_CLOSED" - PropertyChanges { target: menuBar; y: -height; } - PropertyChanges { target: textArea; y: drawer.height; height: screen.height - drawer.height } - PropertyChanges { target: drawer; y: 0 } - PropertyChanges { target: arrowIcon; rotation: 0 } - } - ] - \endcode - - State changes are abrupt and needs smoother transitions. Transitions between states - are defined using the \l Transition type, which can then bind to the item's - \c transitions property. Our text editor has a state transition whenever the state - changes to either \c DRAWER_OPEN or \c DRAWER_CLOSED. Importantly, the transition - needs a \c from and a \c to state but for our transitions, we can use the wild card - \c * symbol to denote that the transition applies to all state changes. - - During transitions, we can assign animations to the property changes. Our \c menuBar - switches position from \c {y: 0} to \c {y: -partition} and we can animate this - transition using the \l NumberAnimation type. We declare that the targets' - properties will animate for a certain duration of time and using a certain easing - curve. An easing curve controls the animation rates and interpolation behavior - during state transitions. The easing curve we chose is - \l{PropertyAnimation::easing.type}{\c Easing.OutExpo}, which slows the movement near - the end of the animation. For more information, see QML's - \l {Animation and Transitions in Qt Quick}{animation} article. - - \code - transitions: [ - Transition { - to: "*" - NumberAnimation { target: textArea; properties: "y, height"; duration: 100; easing.type:Easing.OutExpo } - NumberAnimation { target: menuBar; properties: "y"; duration: 100; easing.type: Easing.OutExpo } - NumberAnimation { target: drawer; properties: "y"; duration: 100; easing.type: Easing.OutExpo } - } - ] - \endcode - - Another way of animating property changes is by declaring a \l Behavior - type. A transition only works during state changes and \c Behavior can set an - animation for a general property change. In the text editor, the arrow has a - \c NumberAnimation animating its \c rotation property whenever the property changes. - - In \c {TextEditor.qml}: - - \code - Behavior { - NumberAnimation { property: "rotation"; easing.type: Easing.OutExpo } - } - \endcode - - Going back to our components with knowledge of states and animations, we can improve - the appearances of the components. In \c Button.qml, we can add \c color and \c scale - property changes when the button is clicked. Color types are animated using - \l ColorAnimation and numbers are animated using \l NumberAnimation. The - \c {on propertyName} syntax displayed below is helpful when targeting a single property. - - In \c {Button.qml}: - \code - ... - - color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor - Behavior on color { ColorAnimation{ duration: 55 } } - - scale: buttonMouseArea.pressed ? 1.1 : 1.0 - Behavior on scale { NumberAnimation{ duration: 55 } } - \endcode - - Additionally, we can enhance the appearances of our QML components by adding color - effects such as gradients and opacity effects. Declaring a \l Gradient object will - override the \c color property. You may declare a color in the gradient using the - \l GradientStop type. The gradient is positioned using a scale, between \c 0.0 and - \c 1.0. - - In \c {MenuBar.qml}: - - \code - gradient: Gradient { - GradientStop { position: 0.0; color: "#8C8F8C" } - GradientStop { position: 0.17; color: "#6A6D6A" } - GradientStop { position: 0.98; color: "#3F3F3F" } - GradientStop { position: 1.0; color: "#0e1B20" } - } - \endcode - - This gradient is used by the menu bar to display a gradient simulating depth. - The first color starts at \c 0.0 and the last color is at \c 1.0. - - \section3 Where to Go from Here + \section2 \c main.qml - We are finished building the user interface of a very simple text editor. - Going forward, the user interface is complete, and we can implement the - application logic using regular Qt and C++. QML works nicely as a prototyping - tool, separating the application logic away from the UI design. + \c mainWindow, an ApplicationWindow QML type, is the root item in + this app. - \image qml-texteditor4_texteditor.png + \quotefromfile tutorials/alarms/main.qml + \skipto ApplicationWindow + \printuntil visible - \section2 Extending QML using Qt C++ + The ListView \c alarmListView combines the data from \c alarmModel + with the layout defined in \c alarmDelegate. - Now that we have our text editor layout, we may now implement the text editor - functionalities in C++. Using QML with C++ enables us to create our application - logic using Qt. We can create a QML context in a C++ application using - \l {Integrating QML and C++}{Qt's Quick classes} and display the QML - types using a QQuickView. Alternatively, we can export our C++ code into - an extension plugin, and make it accessible to QML as a new - \l {Identified Modules}{identified module}. - When launching QML files with \l {Prototyping with qmlscene}{qmlscene}, - we only need to ensure our module is found under one of the - \l {QML Import Path}{import paths} the QML engine searches for modules - to import. For our application we shall the latter approach. This way, we can - load the QML file directly with \c qmlscene instead of running an executable. + \quotefromfile tutorials/alarms/main.qml + \skipuntil visible + \printto RoundButton - \section3 Exposing C++ Classes to QML + New alarms can be added by clicking RoundButton \c addAlarmButton. + Clicking it opens a \l {Dialog: QtQuickControls2}{dialog} screen \c alarmDialog. - We will be implementing file loading and saving using Qt and C++. C++ classes - and functions can be used in QML by registering them. They also needs to be - compiled as a Qt plugin and then exposed as a QML module. + \printuntil alarmDialog.open + \printuntil alarmListView.model + \printline } - For our application, we need to create the following items: - \list 1 - \li \c Directory class that will handle directory related operations - \li \c File class which is a QObject, simulating the list of files in a directory - \li A plugin class that will register the classes to the QML context - \li Qt project file that will compile the plugin - \li A \l {Module Definition qmldir Files}{module definition qmldir file} that - defines the identifier (import URI) and content (in this case, our plugin) - to be made available by the QML module - \endlist - - \note Since Qt 5.1, \l{Qt Quick Dialogs} module provides a file dialog component - that you can use for choosing files from the local file system. For illustrative - purposes, we write our own in this tutorial. - - \section3 Building a Qt Plugin - - To build a plugin, we need to set the following in a Qt project file. First, - the necessary sources, headers, and Qt modules need to be added into our - project file. All the C++ code and project files are in the \c filedialog - directory. - - In \c {filedialog.pro}: - - \code - TEMPLATE = lib - CONFIG += qt plugin - QT += qml - - DESTDIR += ../imports/FileDialog - OBJECTS_DIR = tmp - MOC_DIR = tmp - - TARGET = filedialogplugin - - HEADERS += \ - directory.h \ - file.h \ - dialogPlugin.h - - SOURCES += \ - directory.cpp \ - file.cpp \ - dialogPlugin.cpp - \endcode + \section2 \c AlarmDialog.qml - In particular, we link the project with the \c qml module and configure it as a - \c plugin, using a \c lib template. We shall put the compiled plugin into the - parent's \c {imports/FileDialog} directory. + This dialog screen has a RowLayout with a \l {Tumbler} each for hours + and minutes, and another RowLayout with a Tumbler each for day, month, + and year. - \section3 Registering a Class into QML + \quotefromfile tutorials/alarms/AlarmDialog.qml + \skipto contentItem + \printuntil /model\: years/ + \printuntil /^}/ - In \c {dialogPlugin.h}: + If you click on \b OK in the dialog, the entered data will be + added to \c alarmModel: - \code - #include <QtQml/QQmlExtensionPlugin> + \quotefromfile tutorials/alarms/AlarmDialog.qml + \skipto onAccepted + \printuntil onRejected - class DialogPlugin : public QQmlExtensionPlugin - { - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.QmlExtensionPlugin.FileDialog") + \section2 \c AlarmDelegate.qml - public: - // registerTypes is inherited from QQmlExtensionPlugin - void registerTypes(const char *uri); - }; + Each alarm in the main screen is an ItemDelegate. The ItemDelegate + \c root contains all fields on the main screen and the detail + screen. The detail screen's fields are only visible after an alarm + has been clicked on, i.e. when \c root.checked is \c true. - \endcode + \quotefromfile tutorials/alarms/AlarmDelegate.qml + \skipto ItemDelegate + \printuntil /^\}/ - We need to export the plugin using the \l {How To Create Qt Plugins}{Q_PLUGIN_METADATA} macro. - Note that in our \c dialogPlugin.h file, we have the \l Q_OBJECT - macro at the top of our class. As well, we need to run \c qmake on the project - file to generate the necessary meta-object code. + \section2 \c AlarmModel.qml - Our plugin class, \c {DialogPlugin}, is a subclass of \l{QQmlExtensionPlugin}. - We need to implement the inherited function, - \l {QQmlExtensionPlugin::registerTypes()}{registerTypes()}. + This QML file contains the definition of \c alarmModel, the ListModel + that manages the alarm data. - In \c {DialogPlugin.cpp}: + It creates five \l {ListElement}{ListElements} with example alarms. - \code - #include "dialogPlugin.h" - #include "directory.h" - #include "file.h" - #include <QtQml> - - void DialogPlugin::registerTypes(const char *uri) - { - // Register the class Directory into QML as a "Directory" type version 1.0 - // @uri FileDialog - qmlRegisterType<Directory>(uri, 1, 0, "Directory"); - qmlRegisterType<File>(uri, 1, 0, "File"); - } - \endcode + \quotefromfile tutorials/alarms/AlarmModel.qml + \skipto import + \printuntil /^\}/ - The \c registerTypes() function registers our File and Directory classes into - QML. This function needs the class name for its template, a major version number, - a minor version number, and a name for our classes. - A \c {// @uri <module identifier>} comment allows Qt Creator to be aware of the - registered types when editing QML files that import this module. + \section2 TumblerDelegate.qml - \section3 Creating QML Properties in a C++ Class + TumblerDelegate defines the graphical properties of the Tumblers. - We can create QML types and properties using C++ and - \l {The Meta-Object System}{Qt's Meta-Object System}. We can implement - properties using slots and signals, making Qt aware of these properties. - These properties can then be used in QML. + \quotefromfile tutorials/alarms/TumblerDelegate.qml + \skipto import + \printuntil /^\}/ - For the text editor, we need to be able to load and save files. Typically, - these features are contained in a file dialog. Fortunately, we can use - \l QDir, \l QFile, and \l QTextStream to implement directory reading and - input/output streams. + \section1 Entering new alarms - \code - class Directory : public QObject { - Q_OBJECT - - Q_PROPERTY (int filesCount READ filesCount CONSTANT) - Q_PROPERTY (QString filename READ filename WRITE setFilename NOTIFY filenameChanged) - Q_PROPERTY (QString fileContent READ fileContent WRITE setFileContent NOTIFY fileContentChanged) - Q_PROPERTY (QQmlListProperty<File> files READ files CONSTANT) - ... - \endcode + At the bottom of the startup screen, you can see a Button for adding + alarms. Click it to open the \b {Add new alarm} dialog. - The \c Directory class uses Qt's Meta-Object System to register properties it - needs to accomplish file handling. The \c Directory class is exported as a plugin - and is useable in QML as the \c Directory type. Each of the listed properties - using the \l Q_PROPERTY() macro is a QML property. + \quotefromfile tutorials/alarms/main.qml + \skipto RoundButton + \printto AlarmDialog - The \l {Q_PROPERTY()}{Q_PROPERTY} declares a property as well as its read and - write functions into Qt's Meta-Object System. For example, the \c filename - property, of type \l QString, is readable using the \c filename() - function and writable using the function \c setFilename(). Additionally, there - is a signal associated to the filename property called \c {filenameChanged()}, - which is emitted whenever the property changes. The read and write functions - are declared as \c public in the header file. + The dialog for new alarms: - Similarly, we have the other properties declared according to their uses. The - \c filesCount property indicates the number of files in a directory. The filename - property is set to the currently selected file's name and the loaded/saved file - content is stored in \c fileContent property. + \image addalarms.png "Add alarms" - \code - Q_PROPERTY(QQmlListProperty<File> files READ files CONSTANT) - \endcode + All fields are entered using \l {Tumbler} QML types. If you press \c OK, + the values selected in the Tumblers are written to \c alarmModel. - The \c files list property is a list of all the filtered files in a directory. - The \c Directory class is implemented to filter out invalid text files; only - files with a \c .txt extension are valid. Further, \l{QList}s can be - used in QML files by declaring them as a QQmlListProperty in C++. - The templated object needs to inherit from a QObject, therefore, - the \c File class must also inherit from QObject. In the \c Directory class, - the list of \c File objects is stored in a QList called \c m_fileList. + \quotefromfile tutorials/alarms/AlarmDialog.qml + \skipto contentItem + \printuntil /^\}/ - \code - class File : public QObject{ + \section1 Editing alarms - Q_OBJECT - Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) + If you click on a particular alarm, you can edit it in the detail + screen. - ... - }; - \endcode + \image detailscreen.png - The properties can then be used in QML as part of the \c Directory object's - properties. Note that we do not have to create an identifier \c id property - in our C++ code. + Clicking on an alarm sets \c root.checked to \c true, which makes + visible the fields of the detail screen. \code - Directory { - id: directory - - filesCount - filename - fileContent - files - - files[0].name - } + visible: root.checked \endcode - Because QML uses Javascript's syntax and structure, we can iterate through - the list of files and retrieve its properties. To retrieve the first file's - name property, we can call \c {files[0].name}. + If you want the alarm to trigger also on other days, check \c alarmRepeat. + The Repeater will display a checkable RoundButton for each day of the week. - Regular C++ functions are also accessible from QML. The file loading and saving - functions are implemented in C++ and declared using the \l Q_INVOKABLE macro. - Alternatively, we can declare the functions as a \c slot and the functions will - be accessible from QML. + \quotefromfile tutorials/alarms/AlarmDelegate.qml + \skipto Flow + \printto TextField - In \c {directory.h}: + If you modify the description of the alarm, it will be reflected in + the main screen afterwards. - \code - Q_INVOKABLE void saveFile(); - Q_INVOKABLE void loadFile(); - \endcode + \printto Button - The \c Directory class also has to notify other objects whenever the directory - contents change. This feature is performed using a \c signal. As previously - mentioned, QML signals have a corresponding handler with their names prepended - with \c on. The signal is called \c directoryChanged and it is emitted whenever - there is a directory refresh. The refresh simply reloads the directory contents - and updates the list of valid files in the directory. QML items can then be - notified by attaching an action to the \c onDirectoryChanged signal handler. - - The \c list properties need to be explored further. This is because list - properties use callbacks to access and modify the list contents. The list - property is of type \c QQmlListProperty<File>. Whenever the list - is accessed, the accessor function needs to return a - \c QQmlListProperty<File>. The template type, \c File, needs to be a - \c QObject derivative. Further, to create the - \c QQmlListProperty, the list's accessor - and modifiers need to be passed to the constructor as function pointers. The list, - a \c QList in our case, also needs to be a list of \c File pointers. - - The constructor of \l QQmlListProperty is declared - as follows: - \code - QQmlListProperty (QObject *object, void *data, AppendFunction append, - CountFunction count = 0, AtFunction at = 0, ClearFunction clear = 0); - \endcode + \section1 Deleting alarms - It takes pointers to functions that will append the list, count - the list, retrieve the item using an index, and empty the list. Only the \c append - function is mandatory. Note that the function pointers must match the definition - of \l {QQmlListProperty::AppendFunction}{AppendFunction}, - \l {QQmlListProperty::CountFunction}{CountFunction}, - \l {QQmlListProperty::AtFunction}{AtFunction}, or - \l {QQmlListProperty::ClearFunction}{ClearFunction}. + The detail screen (see above) has a Button for deleting alarms. + When \c onClicked is emitted, the current ListElement is deleted + from \c alarmModel. - The \c Directory class constructs a QQmlListProperty instance like this: + \printuntil alarmModel.remove + \printuntil } - \code - QQmlListProperty<File>(this, &m_fileList, &appendFiles, &filesSize, &fileAt, &clearFilesPtr); - \endcode - - Where the parameters are pointers to following functions: - - \code - void appendFiles(QQmlListProperty<File> *property, File *file); - File* fileAt(QQmlListProperty<File> *property, int index); - int filesSize(QQmlListProperty<File> *property); - void clearFilesPtr(QQmlListProperty<File> *property); - \endcode + \section2 Summary - To simplify our file dialog, the \c Directory class filters out invalid text - files, which are files that do not have a \c .txt extension. If a file name - doesn't have the \c .txt extension, then it won't be seen in our file dialog. - Also, the implementation makes sure that saved files have a \c .txt extension in - the file name. \c Directory uses \l {QTextStream} to read the file and to output - the file contents to a file. + The app has no code for adding sound or vibration to the alarm, nor does + it store the alarms in any format or database. Maybe it could be an + interesting coding project to add those features. Adding sound to this + program can be realized with \l{Qt Multimedia QML Types}. Storing the data + could be done quickly and easily in \l{JSON Support in Qt}{JSON format}. - With our \c Directory object, we can retrieve the files as a list, know how many - text files is in the application directory, get the file's name and content as a - string, and be notified whenever there are changes in the directory contents. - - To build the plugin, run \c qmake on the \c filedialog.pro project file, then run - \c make to build and transfer the plugin to the \c plugins directory. - - - \section3 Importing a Plugin in QML - - The \c qmlscene tool imports files that are in the same directory as the - application. We can also create a \c qmldir file containing the locations of - content we wish to import. In this case, there is only the plugin, but other - resources (QML types, JavaScript files) can be defined in a \c qmldir as well. - - Contents of the \c qmldir file: - \code - module FileDialog - plugin filedialogplugin - \endcode - - The module we just created is called \c FileDialog, and it makes available a plugin - called \c filedialogplugin that matches the \c TARGET field in the project file. - Because we did not specify a path for the plugin, the QML engine expects to find it - in the same directory as the \c qmldir file. - - The QML types that are registered by our plugin can now be imported in QML: - - \code - import FileDialog 1.0 - - Directory { - id: directory - } - ... - \endcode - - - \section3 Integrating a File Dialog into the File Menu - - Our \c FileMenu needs to display the \c FileDialog object, containing a list of - the text files in a directory thus allowing the user to select the file by - clicking on the list. We also need to assign the save, load, and new buttons - to their respective actions. The FileMenu contains an editable text input to - allow the user to type a file name using the keyboard. - - The \c Directory object is used in the \c FileMenu.qml file and it notifies the - \c FileDialog object that the directory refreshed its contents. This notification - is performed in the signal handler, \c onDirectoryChanged. - - In \c {FileMenu.qml}: - - \code - Directory { - id: directory - filename: textInput.text - onDirectoryChanged: fileDialog.notifyRefresh() - } - \endcode - - Keeping with the simplicity of our application, the file dialog will always be - visible and will not display invalid text files, which do not have a \c .txt - extension to their filenames. - - In \c {FileDialog.qml}: - - \code - signal notifyRefresh() - onNotifyRefresh: dirView.model = directory.files - \endcode - - The \c FileDialog object will display the contents of a directory by reading its - list property called \c files. The files are used as the model of a - \l {GridView} object, which displays data items in a grid according - to a delegate. The delegate handles the appearance of the model and our file - dialog will simply create a grid with text centered in the middle. Clicking on - the file name will result in the appearance of a rectangle to highlight the file - name. The \c FileDialog is notified whenever the \c notifyRefresh signal is emitted, - reloading the files in the directory. - - In \c {FileMenu.qml}: - - \code - Button { - id: newButton - label: "New" - onButtonClick: { - textArea.textContent = "" - } - } - Button { - id: loadButton - label: "Load" - onButtonClick: { - directory.filename = textInput.text - directory.loadFile() - textArea.textContent = directory.fileContent - } - } - Button { - id: saveButton - label: "Save" - onButtonClick: { - directory.fileContent = textArea.textContent - directory.filename = textInput.text - directory.saveFile() - } - } - Button { - id: exitButton - label: "Exit" - onButtonClick: { - Qt.quit() - } - } - \endcode - - Our \c FileMenu can now connect to their respective actions. The \c saveButton - will transfer the text from the \c TextEdit onto the directory's \c fileContent - property, then copy its file name from the editable text input. Finally, the button - calls the \c saveFile() function, saving the file. The \c loadButton has a similar - execution. Also, the \c New action will empty the contents of the \c TextEdit. - - Further, the \c EditMenu buttons are connected to the \c TextEdit functions to copy, - paste, and select all the text in the text editor. - - \image qml-texteditor5_filemenu.png - - \section2 Final Text Editor Application - - \image qml-texteditor5_newfile.png - - The application can function as a simple text editor, able to accept text - and save it into a file. It can also load a file and perform text manipulation. - - \section1 Running the Text Editor - - We need to build the file dialog C++ plugin before the text editor can run. - To build it, enter the \c filedialog directory, then run \c qmake and compile - using \c make or \c nmake, depending on your platform. - - Run the text editor with \l{Prototyping with qmlscene}{qmlscene}, passing the - imports directory as a parameter so that the QML engine knows where to look for - the module that imports our file dialog plugin: - - \code - qmlscene -I ./imports texteditor.qml - \endcode + \sa {Qt Multimedia QML Types}, {JSON Support in Qt} - The complete source code is in \c{examples/quick/tutorials/gettingStartedQml} directory. -*/ diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc index 21462724..3416fcd7 100644 --- a/doc/src/getting-started/installation.qdoc +++ b/doc/src/getting-started/installation.qdoc @@ -41,7 +41,7 @@ For more information, visit the \l{Getting Started with Qt} page. This page lists the relevant information for installing Qt by building the Qt sources. The installation procedure is different on each Qt platform. This page -collects the relevant information for the \l{Community Supported Platforms} +collects the relevant information for the \l{Supported Platforms} {supported platforms}. \section1 General Installation Information @@ -64,7 +64,6 @@ visit the following page: \section1 \macos \list -\li \l{Qt for macOS - Requirements} \li \l{Qt for macOS - Building from Source} \endlist diff --git a/doc/src/images/addalarms.png b/doc/src/images/addalarms.png Binary files differnew file mode 100644 index 00000000..2874d2e6 --- /dev/null +++ b/doc/src/images/addalarms.png diff --git a/doc/src/images/alarms2.png b/doc/src/images/alarms2.png Binary files differnew file mode 100644 index 00000000..dbcb852c --- /dev/null +++ b/doc/src/images/alarms2.png diff --git a/doc/src/images/alarms3.png b/doc/src/images/alarms3.png Binary files differnew file mode 100644 index 00000000..48abec6a --- /dev/null +++ b/doc/src/images/alarms3.png diff --git a/doc/src/images/detailscreen.png b/doc/src/images/detailscreen.png Binary files differnew file mode 100644 index 00000000..bc0f0afb --- /dev/null +++ b/doc/src/images/detailscreen.png diff --git a/doc/src/images/mainscreen.png b/doc/src/images/mainscreen.png Binary files differnew file mode 100644 index 00000000..e0c5e979 --- /dev/null +++ b/doc/src/images/mainscreen.png diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index 321d6b7f..7bc8134b 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -94,7 +94,7 @@ \li \l{Getting Started with Qt} \li \l{What's New in Qt 5} \li \l{Qt Examples and Tutorials}{Examples and Tutorials} - \li \l{Community Supported Platforms}{Supported Platforms} + \li \l{Supported Platforms} \li \l{Qt Licensing} \endlist \enddiv diff --git a/doc/src/platforms/platform-notes-android.qdoc b/doc/src/platforms/android-platform-notes.qdoc index be1ee75c..6baed10f 100644 --- a/doc/src/platforms/platform-notes-android.qdoc +++ b/doc/src/platforms/android-platform-notes.qdoc @@ -27,7 +27,7 @@ /*! - \page platform-notes-android.html + \page android-platform-notes.html \title Platform and Compiler Notes - Android \contentspage Platform and Compiler Notes diff --git a/doc/src/platforms/android.qdoc b/doc/src/platforms/android.qdoc index cd2c6e86..812583e6 100644 --- a/doc/src/platforms/android.qdoc +++ b/doc/src/platforms/android.qdoc @@ -26,7 +26,7 @@ ****************************************************************************/ /*! -\page android_support.html +\page android.html \title Qt for Android \brief Provides information about Android support in Qt. \ingroup supportedplatform @@ -36,6 +36,11 @@ v4.1 (API level 16) or later. All Qt modules (essential and add-on) are supported except Qt WebEngine, Qt Serial Port, and the platform-specific ones (Qt Mac Extras, Qt Windows Extras, and Qt X11 Extras). +The following configurations are supported. + +\include supported-platforms.qdocinc android + +\br The following list summarizes what you can do with Qt for Android: \list @@ -75,7 +80,7 @@ The following topics provide more details about how to use Qt for Android: */ /*! - \page android3rdpartylibs.html + \page android-3rdparty-libs.html \title Third-party Android Libraries \brief Provides instructions to include third-party Android libraries in an application. @@ -136,7 +141,7 @@ The following topics provide more details about how to use Qt for Android: */ /*! -\page androidgs.html +\page android-getting-started.html \title Getting Started with Qt for Android \brief Provides instructions to install and configure your development environment. @@ -235,7 +240,7 @@ field to list all the examples tested on Android. To develop a simple application from scratch, see \l{Creating a Mobile Application}. */ /*! -\page portingtoandroid.html +\page porting-to-android.html \title Porting to Android \brief Provides instructions to port your existing Qt application to Android. @@ -296,7 +301,7 @@ AVDs found. */ /*! -\page opensslsupport.html +\page android-openssl-support.html \title Adding OpenSSL Support for Android \brief Provides instructions to package OpenSSL libraries with your Qt application for Android. @@ -413,7 +418,7 @@ to deploy the APK on the target you chose and launch the application. */ /*! -\page publishtogoogleplay.html +\page android-publishing-to-googleplay.html \title Publishing to Google Play \brief Provides instructions to prepare your application for publishing. @@ -482,7 +487,7 @@ packaging is done and how you can influence it. /*! -\page androidservices.html +\page android-services.html \title Android Services \brief Provides information about Android Services support in Qt. diff --git a/doc/src/platforms/emb-linux.qdoc b/doc/src/platforms/emb-linux.qdoc index dd6b6fe7..706eccd0 100644 --- a/doc/src/platforms/emb-linux.qdoc +++ b/doc/src/platforms/emb-linux.qdoc @@ -879,6 +879,30 @@ ctx.doneCurrent(); \endcode + KMS/DRM can be used with two different DRM APIs which are \e legacy and \e atomic. + The main benefit of DRM atomic API is to allow several DRM plane updates + within the same renderloop, whereas legacy API would require one plane update + per vsync. + + Atomic API is useful when you application needs to blend content into overlays + keeping all the updates within the same vsync. Still not all devices + support this API and it could be unavailable on some older devices. + KMS backend will by default use the legacy API, but you can enable the DRM + atomic API with \c QT_QPA_EGLFS_KMS_ATOMIC environment variable set to 1. + + Using a smaller framebuffer than screen resolution can also be useful. + This is possible with DRM atomic using the \c size parameter in the JSON file. + The example below uses a 1280x720 framebuffer on a 3840x2160 videomode : + + \badcode + { + "device": "/dev/dri/card0", + "outputs": [ + { "name": "HDMI1", "mode": "3840x2160", "size": "1280x720", "format": "argb8888" } + ] + } + \endcode + \section2 eglfs with eglfs_kms_egldevice backend This backend, typically used on Tegra devices, is similar to the KMS/DRM @@ -1062,15 +1086,13 @@ Refer to the \l{https://wiki.qt.io/WestonTouchScreenIssues}{Qt Wiki} for further information. - //! Qt Quick WebGL QPA Plugin - \include webgl.qdocinc webgl - \section1 Related Topics \list \li \l{Qt for Device Creation} \li \l Emulator \li \l{Qt Virtual Keyboard} + \li \l{Qt Quick WebGL} \endlist */ diff --git a/doc/src/platforms/integrity-build-monolith-app-tutorial.qdoc b/doc/src/platforms/integrity-build-monolith-app-tutorial.qdoc index b7d5a9ec..1762c239 100644 --- a/doc/src/platforms/integrity-build-monolith-app-tutorial.qdoc +++ b/doc/src/platforms/integrity-build-monolith-app-tutorial.qdoc @@ -29,7 +29,7 @@ /*! \page integrity-monolith-project-tutorial.html \title Qt for INTEGRITY: Monolith Project Tutorial - \previouspage platform-notes-integrity.html + \previouspage integrity.html \nextpage integrity-installing-dependencies.html The INTEGRITY applications can be monolith application projects, diff --git a/doc/src/platforms/integrity-building-qt-imx6.qdocinc b/doc/src/platforms/integrity-building-qt-imx6.qdocinc index d9fde2c5..ee0e00a1 100644 --- a/doc/src/platforms/integrity-building-qt-imx6.qdocinc +++ b/doc/src/platforms/integrity-building-qt-imx6.qdocinc @@ -121,6 +121,7 @@ make -j6 \endcode + \target installing-qt-for-imx6 \section1 Installing Qt If you have not used the configure option \c {-prefix $PWD/qtbase} in \l {Configuring Qt}, diff --git a/doc/src/platforms/platform-notes-integrity.qdoc b/doc/src/platforms/integrity.qdoc index 00c028b2..da5c127e 100644 --- a/doc/src/platforms/platform-notes-integrity.qdoc +++ b/doc/src/platforms/integrity.qdoc @@ -27,7 +27,7 @@ /*! - \page platform-notes-integrity.html + \page integrity.html \title Qt for INTEGRITY \contentspage Platform Notes \keyword INTEGRITY diff --git a/doc/src/platforms/ios.qdoc b/doc/src/platforms/ios.qdoc index 352187cb..f8400143 100644 --- a/doc/src/platforms/ios.qdoc +++ b/doc/src/platforms/ios.qdoc @@ -26,7 +26,7 @@ ****************************************************************************/ /*! - \page ios_support.html + \page ios.html \title Qt for iOS \brief Provides insight into Qt's iOS port and how to use it. \ingroup supportedplatform @@ -34,6 +34,13 @@ Qt's iOS port allows you to run Qt applications on iOS devices, such as iPhones, iPads, and iPod Touches. + \target ios-supported-configurations + \section1 Supported Configurations + + The following configurations are supported. + + \include supported-platforms.qdocinc ios + \include apple-getting-started.qdocinc getting started \section1 Examples for iOS @@ -56,7 +63,7 @@ */ /*! - \page building-from-source-ios.html + \page ios-building-from-source.html \title Qt for iOS - Building from Source \brief Provides instructions to build Qt from source for iOS platform. @@ -177,7 +184,7 @@ */ /*! - \page platform-notes-ios.html + \page ios-platform-notes.html \title Platform Notes - iOS \brief This page contains information about building Qt applications for and running them on the iOS platform. @@ -499,7 +506,7 @@ The application should be tested on the iOS versions and devices that it is targeted to support. The minimum deployment target for Qt applications varies by Qt version. For more information, see - \l{Supported Platforms and Configurations}. + \l{ios-supported-configurations}{supported configurations}. The actual publishing process involves creating a distribution certificate and a provision profile, creating a signed archive of your application, and running a set of validation tests on it. diff --git a/doc/src/platforms/linux.qdoc b/doc/src/platforms/linux.qdoc index 8284124d..26b8e866 100644 --- a/doc/src/platforms/linux.qdoc +++ b/doc/src/platforms/linux.qdoc @@ -33,18 +33,17 @@ Qt's support for different Linux platforms is extensive and mature. - \section1 Downloading and Installing Qt + To download and install Qt for Linux, follow the instructions on the + \l{Getting Started with Qt} page. - There are two ways to install Qt: - \list 1 - \li through the Qt Installers - downloads and installs Qt - \li through the \e{Qt sources}. - \endlist + \target linux-supported-configurations + \section1 Supported Configurations + + The following configurations are supported. - You can download the Qt 5 installers and sources from the \l Downloads page. - For more information, visit the \l{Getting Started with Qt} page. + \include supported-platforms.qdocinc linux - \section2 Requirements for Development Host + \section1 Requirements for Development Host The Qt installers for Linux assume that a C++ compiler, debugger, make, and other development tools are provided by the host @@ -75,7 +74,7 @@ sudo zypper install -t pattern devel_basis \endcode - \section2 Building Qt 5 from Source + \section1 Building Qt 5 from Source You can also build Qt 5 from the source package and configure it according to your target platform. The source packages are obtained from @@ -785,7 +784,7 @@ Linux/x86, Linux/ppc, Linux/amd64 and Linux/ia64 (including Altix(R)). For information about the specific compilers supported, visit the - \l{Community Supported Platforms#Reference Configurations}{supported platforms} page. + \l{Supported Platforms#Reference Configurations}{supported platforms} page. \section2 Installation problems diff --git a/doc/src/platforms/osx.qdoc b/doc/src/platforms/macos.qdoc index afc4a3f7..513d08bf 100644 --- a/doc/src/platforms/osx.qdoc +++ b/doc/src/platforms/macos.qdoc @@ -26,11 +26,11 @@ ****************************************************************************/ /*! - \page osx.html + \page macos.html \title Qt for macOS \brief Platform support for \macos. + \keyword Qt for macOS \ingroup supportedplatform - \keyword Qt for OS X \macos (previously known as OS X or Mac OS X) is a UNIX platform and behaves similarly to other Unix-like platforms. The main difference is @@ -39,32 +39,22 @@ Application development on \macos is done using Xcode, which is available from \l{https://developer.apple.com/xcode/}. - \section1 Downloading and Installing Qt + To download and install Qt for \macos, follow the instructions on the + \l{Getting Started with Qt} page. - There are two ways to install Qt: - \list 1 - \li through the \e{Qt Installers} - downloads and installs Qt - \li through the \e{Qt sources}. - \endlist + \note Qt 5 uses Cocoa, therefore, building for Carbon is not possible. - You can download the Qt 5 installers and sources from the \l Downloads page. - For more information, visit the \l{Getting Started with Qt} page. + \target macos-supported-versions + \section1 Supported Versions - \section2 Building Qt 5 from Source + The following macOS versions are supported. - Below, you will find more information about building Qt from source. - \list - \li \l{Qt for macOS - Building from Source} - building and installing from source - \endlist + \include supported-platforms.qdocinc macos - \note Qt 5 uses Cocoa, therefore, building for Carbon is not possible. - - \section1 \macos Versions + \section1 Supported Architectures - See \l{Supported Platforms} for the list of \macos versions supported by Qt. - - Qt can be built for either x86_64 or x86_64h (Haswell). x86_64 is used by default. - To select a x86_64h build, use the \c QMAKE_APPLE_DEVICE_ARCHS \c qmake variable. + By default, Qt is built for x86_64. To build for x86_64h (Haswell). use the + \c QMAKE_APPLE_DEVICE_ARCHS \c qmake variable. This is selectable at configure time: \code ./configure -platform macx-clang QMAKE_APPLE_DEVICE_ARCHS=x86_64h @@ -76,10 +66,6 @@ ./configure -platform macx-clang QMAKE_APPLE_DEVICE_ARCHS="x86_64 x86_64h" \endcode - \note Qt 5.10+ does not support 32-bit builds. - \note Qt 5 does not support OS X on PowerPC. - \note Static builds are not tested. - \section1 Additional Command-Line Options On the command-line, applications can be built using \c qmake and \c make. @@ -163,46 +149,42 @@ */ /*! - \page osx-requirements.html - \title Qt for macOS - Requirements - \brief Setting up the \macos environment for Qt. + \page macos-building.html + \title Qt for macOS - Building from Source + \brief How to install Qt on \macos. + + \section1 Requirements - Qt requires Xcode to be installed on the system. You can get it from: + Qt requires a macOS platform SDK and corresponding toolchain to be installed + on the system. You can get this by installing the Xcode command line tools: - \l{http://developer.apple.com/xcode/} + \code + xcode-select --install + \endcode - \section1 Required Compiler Versions + Or by downloading and installing \l{https://developer.apple.com/xcode/}{Xcode}. + + \section2 Compiler Versions Qt for macOS is tested and compatible with several versions of GCC (GNU Compiler Collection) and Clang (as available from Xcode). For a list of tested configurations, refer to the \e{Reference Configuration} section of - the \l{Community Supported Platforms#Reference Configurations}{supported platforms} + the \l{Supported Platforms#Reference Configurations}{supported platforms} page. - \section2 OS X on PowerPC hardware - - Qt 5 does not support OS X on PowerPC. - \section1 QDoc Dependencies + Since version 5.11, \l {QDoc Manual}{QDoc} uses Clang to parse C++ code. If you wish to build QDoc manually, refer to \l {Installing Clang for QDoc} for specific build requirements. -*/ - -/*! - \page osx-building.html - \title Qt for macOS - Building from Source - \brief How to install Qt on \macos. + \section1 Steps for Building - Qt for macOS has some requirements that are given in more detail - in the \l{Qt for macOS - Requirements} document. - - The following instructions describe how to install Qt from the source package. + The following instructions describe how to build Qt from the source package. You can download the Qt 5 sources from the \l{Downloads} page. For more information, visit the \l{Getting Started with Qt} page. - \section1 Step 1: Install the License File (Commercially Licensed Qt Only) + \section2 Step 1: Install the License File (Commercially Licensed Qt Only) If you use Qt with a commercial license, the Qt tools look for a local license file. If you are using a binary installer or the commercial Qt Creator, your licenses @@ -215,7 +197,7 @@ different location or file name, you need to set the \c{QT_LICENSE_FILE} environment variable to the respective file path. - \section1 Step 2: Unpack the Archive + \section2 Step 2: Unpack the Archive Unpack the archive if you have not done so already. For example, if you have the \c{qt-everywhere-opensource-src-%VERSION%.tar.gz} @@ -226,7 +208,7 @@ This creates the directory \c{/tmp/qt-everywhere-opensource-src-%VERSION%} containing the files from the archive. - \section1 Step 3: Build the Qt Library + \section2 Step 3: Build the Qt Library To configure the Qt library for your machine type, run the \c{./configure} script in the package directory. @@ -264,7 +246,7 @@ \note There is a potential race condition when running make install with multiple jobs. It is best to only run one make job (-j1) for the install. - \section1 Step 4: Set the Environment Variables + \section2 Step 4: Set the Environment Variables In order to use Qt, some environment variables need to be extended. @@ -286,10 +268,23 @@ \b {That's all. Qt is now installed.} + \section1 Limitations + + \section2 PowerPC hardware + + Qt 5 does not support macOS on PowerPC. + + \section2 Fink + + If you have installed the Qt for X11 package from \l{http://www.finkproject.org/}{Fink}, + it will set the \c QMAKESPEC environment variable to \c darwin-g++. This will cause + problems when you build the Qt for macOS package. To fix this, simply unset your \c + QMAKESPEC or set it to \c macx-g++ before you run \c configure. To get a + fresh Qt distribution, run \c{make confclean} on the command-line. */ /*! - \page osx-issues.html + \page macos-issues.html \title Qt for macOS - Specific Issues \brief A description of issues with Qt that are specific to \macos. @@ -614,14 +609,6 @@ \section1 Limitations - \section2 Fink - - If you have installed the Qt for X11 package from \l{Fink}, it will set the - \c QMAKESPEC environment variable to \c darwin-g++. This will cause problems when - you build the Qt for macOS package. To fix this, simply unset your \c - QMAKESPEC or set it to \c macx-g++ before you run \c configure. To get a - fresh Qt distribution, run \c{make confclean} in the command-line. - \section2 MySQL and \macos There seems to be a issue when both \c -prebind and \c -multi_module are @@ -679,7 +666,7 @@ */ /*! - \page osx-deployment.html + \page macos-deployment.html \title Qt for macOS - Deployment \brief Describes the deployment process for \macos. diff --git a/doc/src/platforms/platform-notes.qdocinc b/doc/src/platforms/platform-notes.qdocinc deleted file mode 100644 index e69de29b..00000000 --- a/doc/src/platforms/platform-notes.qdocinc +++ /dev/null diff --git a/doc/src/platforms/platform-notes-rtos.qdoc b/doc/src/platforms/qnx.qdoc index e237ecf1..b307ded9 100644 --- a/doc/src/platforms/platform-notes-rtos.qdoc +++ b/doc/src/platforms/qnx.qdoc @@ -26,9 +26,10 @@ ****************************************************************************/ /*! - \page platform-notes-qnx.html - \title Platform and Compiler Notes - QNX + \page qnx.html + \title Qt for QNX \contentspage Platform and Compiler Notes + \ingroup supportedplatform \keyword QNX \section1 Supported Architectures and QNX Releases diff --git a/doc/src/platforms/supported-platforms.qdoc b/doc/src/platforms/supported-platforms.qdoc index 657f5742..21660e1f 100644 --- a/doc/src/platforms/supported-platforms.qdoc +++ b/doc/src/platforms/supported-platforms.qdoc @@ -26,7 +26,6 @@ ****************************************************************************/ /*! - \keyword Community Supported Platforms \page supported-platforms.html \title Supported Platforms \brief The platforms supported by Qt. @@ -39,36 +38,27 @@ across desktop, mobile and embedded operating systems without rewriting the source code. - Qt is supported on a variety of 32-bit and 64-bit platforms, - and can usually be built on each platform with GCC, a vendor-supplied - compiler, or a third party compiler. Open GL (ES) 2.0, - DirectX 9 or 11 (with ANGLE), or an \l {Qt Quick 2D Renderer} {alternative + Qt is supported on a variety of 32-bit and 64-bit platforms, and can usually + be built on each platform with GCC, a vendor-supplied compiler, or a third + party compiler as indicated in the overview below. + + Open GL (ES) 2.0, DirectX 9 or 11 (with ANGLE), or an \l {Qt Quick 2D Renderer} {alternative renderer} is required for \l [QtQuick] {Qt Quick} 2. \l [QtWidgets] {Qt Widgets}{Widgets} can be used without hardware acceleration. - In Qt 5 all platforms are created using the - \l{Qt Platform Abstraction} (QPA), which makes it easier - than before to port Qt into a new operating system. - - \target Desktop Platforms - \section1 Supported Configurations - - The following table lists configurations supported by The Qt Company. - A \e {configuration} is a combination of an operating system version, - a compiler version, and a graphics system. + In Qt 5 all platforms are created using the \l{Qt Platform Abstraction} + (QPA), which makes it easy to port Qt into a new operating system. - \b {Supported configurations for Qt \qtver} + The following platforms are supported in Qt \qtver. For support information + for prior Qt releases, please consult the relevant version in the + \l {http://doc.qt.io/archives/}{Qt Documentation Archives}. - \include supported-platforms.qdocinc latest + Configurations in \b bold are \l {Reference Configurations}. - In the above table, the configurations in \b bold are \e {reference - configurations}. - - \b{See also}: - \l{Qt for Device Creation: Supported Target Devices and Development Hosts}. + \include supported-platforms.qdocinc all - \section2 Reference Configurations + \section1 Reference Configurations The reference configurations are run on the continuous integration (CI) system within Qt Project. In addition, they are subjected to unit test suite @@ -84,13 +74,6 @@ sufficient effort is made to bring continuous integration to an acceptable state for that particular configuration. - The following page lists the configurations supported by The - Qt Company for each released Qt version: - - \list - \li \l {Supported Platforms and Configurations} - \endlist - The Qt Company, Qt partners, open source projects and community users are able to provide assistance with various different supported platforms and configurations. @@ -100,6 +83,16 @@ You can download the Qt 5 installers and source packages from the \l Downloads page. For more information, visit the \l{Getting Started with Qt} page. + \section2 Exceptions + Individual modules might be available only on some platforms, or they might + not support all configurations. For example, as Qt WebEngine has Chromium + as a third-party dependency, platform or configuration limitations upstream + also apply to Qt WebEngine. + + The documentation for each module contains detailed information about any + exceptions the module has from the general platform and configuration + support as described on this page. + \section1 Deployment of Qt Applications The deployment procedure for each platform is different and they are @@ -126,26 +119,3 @@ non-infringement with regard to the Licensed Software. */ - -/*! - \page supported-platforms-and-configurations.html - \title Supported Platforms and Configurations - - Qt is supported on a variety of 32-bit and 64-bit platforms, and can be - built on each platform with GCC, a vendor-supplied compiler, or a third - party compiler as indicated in the table below. - - Configurations in \b bold are run on the continuous integration (CI) system; - they are tested automatically for every change submitted on that - platform/compiler combination against the test suite available as part of - Qt. - - \note Individual modules might be available only on some platforms, or - they might not support all configurations. For more information, see the - documentation for each module. - - \b {See also}: \l {http://doc.qt.io/QtForDeviceCreation/qtee-supported-platforms.html} - {Qt for Device Creation: Supported Platforms}. - - \include supported-platforms.qdocinc all -*/ diff --git a/doc/src/platforms/supported-platforms.qdocinc b/doc/src/platforms/supported-platforms.qdocinc index 9fbd24fa..47925f5e 100644 --- a/doc/src/platforms/supported-platforms.qdocinc +++ b/doc/src/platforms/supported-platforms.qdocinc @@ -26,598 +26,129 @@ ****************************************************************************/ /*! -//! [embedded] -Embedded Platforms: \l {Qt for Embedded Linux}{Embedded Linux}, -Windows Embedded (Compact and Standard), -\l {QNX} -//! [embedded] - -//! [mobile] -Mobile Platforms: \l {Qt for Android}{Android}, -\l {Qt for iOS}{iOS}, -\l {Qt for WinRT}{WinRT} -//! [mobile] //! [all] -\section1 Qt 5.11 -\b {Supported until one year after release} -//! [5.11] //! [latest] - \table 80% - \header \li Platform \li Compiler \li Notes - \header \li {3,1} \l {Qt for Windows}{Windows} - \row \li Windows 10 (x86_64) - \li \b {MSVC 2017}, \b {MSVC 2015}, MinGW 5.3 - \li Tested on \e {Windows 10 Creators Update} - \row \li Windows 10 (x86) - \li \b {MSVC 2017}, \b {MSVC 2015}, MinGW 5.3 - \li Tested on \e {Windows 10 Creators Update} - \row \li Windows 8.1 (x86_64) - \li MSVC 2017, \b {MSVC 2015}, MinGW 5.3 - \li - \row \li Windows 8.1 (x86) - \li MSVC 2017, \b {MSVC 2015}, MinGW 5.3 - \li - \row \li Windows 7 (x86_64) - \li MSVC 2017, MSVC 2015, \b {MinGW 5.3} - \li - \row \li Windows 7 (x86) - \li MSVC 2017, MSVC 2015, \b {MinGW 5.3} - \li \l{https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.3.0/threads-posix/dwarf/i686-5.3.0-release-posix-dwarf-rt_v4-rev0.7z/download}{MinGW-builds gcc 5.3.0 (x86)} - - \row \li {3,1} \header \li {3,1} Universal Windows Platform (UWP) - \row \li UWP 10 (\b x86, \b x86_64, \b armv7) - \li \b {MSVC 2017}, \b {MSVC 2015} - \li Host: \b {Windows 10 (x86_64)} \e {Creators Update} - - \row \li {3,1} \header \li {3,1} \l {Qt for Linux/X11}{Linux/X11} - \row \li openSUSE 42.2 (x86_64) - \li GCC 4.8, \b {GCC 7}, \b {ICC} - \li - \row \li Red Hat Enterprise Linux 6.6 (x86_64) - \li GCC 4.9.1 - \li devtoolset-3 - \row \li Red Hat Enterprise Linux 7.2 (x86_64) - \li \b {GCC 5.3.1} - \li devtoolset-4 - \row \li Ubuntu 16.04 (x86_64) - \li GCC as provided by Canonical, \b {GCC 5.4.0} - \li - \row \li Linux (x86 and x86_64) - \li GCC 4.8, GCC 4.9, GCC 5, GCC 6, GCC 7 - \li - - \row \li {3,1} \header \li {3,1} \l {Qt for Android}{Android} - \row \li Android 4.1, 5, 6, 7, 8 (armv7, x86)\br - API Level 16 - \li \b {GCC as provided by Google}, \b {MinGW 5.3} - \li Hosts: \b {RHEL 7.2 (x86_64)}, \b{\macos 10.12 (x86_64)}, \b {Windows 7 (x86_64)} - - \row \li {3,1} \header \li {3,1} Darwin Platforms: \l {Qt for macOS}{\macos}, - \l {Qt for iOS}{iOS}, tvOS, watchOS - \row \li \l {Qt for macOS}{\macos} \b 10.11, \b 10.12, \b 10.13 (x86_64) - \li \b {Clang as provided by Apple} - \li \b {Xcode 8.2 (\macos 10.11)}, \b {Xcode 8.3.3 (\macos 10.12)}, \b {Xcode 9 (\macos 10.13)} - \row \li \l {Qt for iOS}{iOS} 10, \b {iOS 11} (armv8) - \li \b {Clang as provided by Apple} - \li \b {Xcode 9 (\macos 10.13)} - \row \li tvOS 10, \b {tvOS 11} (armv8) (Technology Preview) - \li \b {Clang as provided by Apple} - \li \b {Xcode 9 (\macos 10.13)} - \row \li watchOS 3, \b {watchOS 4} (armv7k) (Technology Preview) - \li \b {Clang as provided by Apple} - \li \b {Xcode 9 (\macos 10.13)} - - \row \li {3,1} \header \li {3,1} - Embedded Platforms: \l {Qt for Embedded Linux}{Embedded Linux}, \l {QNX}, \l {INTEGRITY} - \row \li \l {Qt for Embedded Linux}{Embedded Linux} - \li GCC - \li ARM Cortex-A, Intel boards with GCC-based toolchains - \row \li \l {Qt for Device Creation}{Embedded Linux (Boot2Qt)} (armv7, armv8, x86, x86_64) - \li \b {GCC 6.2} - \li \b {Yocto 2.3}, Hosts: RHEL 7.2 (x86_64), Windows 7 (x86_64) - \row \li \b {QNX 6.6.0}, 7.0 (armv7 and x86) - \li \b {QCC as provided by QNX} - \li Hosts: \b {RHEL 7.2 (x86_64)}, \b {Windows 7 (x86_64)}, - \b {Windows 10 (x86_64)}, \b {Windows 7 (x86)}, - \b {\macos 10.12} - \row \li \l {INTEGRITY} {INTEGRITY 11.4.4} - \li As provided by Green Hills INTEGRITY - \li Host: RHEL 7.2 (x86_64) - \endtable -//! [5.11] //! [latest] - -\section1 Qt 5.10 -\b {Supported until one year after release} -//! [5.10] - \table 80% - \header \li Platform \li Compiler \li Notes - \header \li {3,1} \l {Qt for Windows}{Windows} - \row \li Windows 10 (x86_64) - \li \b {MSVC 2017}, \b {MSVC 2015}, MSVC 2013, MinGW 5.3 - \li Tested on \e {Windows 10 Creators Update} - \row \li Windows 10 (x86) - \li \b {MSVC 2017}, \b {MSVC 2015}, MSVC 2013, MinGW 5.3 - \li Tested on \e {Windows 10 Creators Update} - \row \li Windows 8.1 (x86_64) - \li MSVC 2017, MSVC 2015, \b {MSVC 2013}, MinGW 5.3 - \li - \row \li Windows 8.1 (x86) - \li MSVC 2017, MSVC 2015, MSVC 2013, MinGW 5.3 - \li - \row \li Windows 7 (x86_64) - \li MSVC 2017, MSVC 2015, MSVC 2013, \b {MinGW 5.3} - \li - \row \li Windows 7 (x86) - \li MSVC 2017, MSVC 2015, MSVC 2013, MinGW 5.3 - \li \l{https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.3.0/threads-posix/dwarf/i686-5.3.0-release-posix-dwarf-rt_v4-rev0.7z/download}{MinGW-builds gcc 5.3.0 (x86)} - - \row \li {3,1} \header \li {3,1} Universal Windows Platform (UWP) - \row \li UWP 10 (\b x86, \b x86_64, \b armv7) - \li \b {MSVC 2017}, \b {MSVC 2015} - \li Host: \b {Windows 10 (x86_64)} \e {Creators Update} - - \row \li {3,1} \header \li {3,1} \l {Qt for Linux/X11}{Linux/X11} - \row \li openSUSE 42.2 (x86_64) - \li GCC 4.8, \b {GCC 7}, \b {ICC} - \li - \row \li Red Hat Enterprise Linux 6.6 (x86_64) - \li GCC 4.9.1 - \li devtoolset-3 - \row \li Red Hat Enterprise Linux 7.2 (x86_64) - \li \b {GCC 5.3.1} - \li devtoolset-4 - \row \li Ubuntu 16.04 (x86_64) - \li GCC as provided by Canonical, \b {GCC 5.4.0} - \li - \row \li Linux (x86 and x86_64) - \li GCC 4.8, GCC 4.9, GCC 5, GCC 6, GCC 7 - \li - - \row \li {3,1} \header \li {3,1} \l {Qt for Android}{Android} - \row \li Android 4.1, 5, 6, 7, 8 (armv7, x86)\br - API Level 16 - \li \b {GCC as provided by Google}, \b {MinGW 5.3} - \li Hosts: \b {RHEL 7.2 (x86_64)}, \b{\macos 10.12 (x86_64)}, \b {Windows 7 (x86_64)} - - \row \li {3,1} \header \li {3,1} Darwin Platforms: \l {Qt for macOS}{\macos}, - \l {Qt for iOS}{iOS}, tvOS, watchOS - \row \li \l {Qt for macOS}{\macos} \b 10.11, \b 10.12, \b 10.13 (x86_64) - \li \b {Clang as provided by Apple} - \li \b {Xcode 8.2 (\macos 10.11)}, \b {Xcode 8.3.3 (\macos 10.12)}, \b {Xcode 9 (\macos 10.13)} - \row \li \l {Qt for iOS}{iOS} 10, \b {iOS 11} (armv8) - \li \b {Clang as provided by Apple} - \li \b {Xcode 9 (\macos 10.13)} - \row \li tvOS 10, \b {tvOS 11} (armv8) (Technology Preview) - \li \b {Clang as provided by Apple} - \li \b {Xcode 9 (\macos 10.13)} - \row \li watchOS 3, \b {watchOS 4} (armv7k) (Technology Preview) - \li \b {Clang as provided by Apple} - \li \b {Xcode 9 (\macos 10.13)} - - \row \li {3,1} \header \li {3,1} - Embedded Platforms: \l {Qt for Embedded Linux}{Embedded Linux}, \l {QNX}, \l {INTEGRITY} - \row \li \l {Qt for Embedded Linux}{Embedded Linux} - \li GCC - \li ARM Cortex-A, Intel boards with GCC-based toolchains - \row \li \l {Qt for Device Creation}{Embedded Linux (Boot2Qt)} (armv7, armv8, x86, x86_64) - \li \b {GCC 6.2} - \li \b {Yocto 2.3}, Hosts: RHEL 7.2 (x86_64), Windows 7 (x86_64) - \row \li \b {QNX 6.6.0}, 7.0 (armv7 and x86) - \li \b {QCC as provided by QNX} - \li Hosts: \b {RHEL 7.2 (x86_64)}, \b {Windows 7 (x86_64)}, - \b {Windows 10 (x86_64)}, \b {Windows 7 (x86)}, - \b {\macos 10.12} - \row \li \l {INTEGRITY} {INTEGRITY 11.4.4} - \li As provided by Green Hills INTEGRITY - \li Host: RHEL 7.2 (x86_64) - \endtable -//! [5.10] - -\section1 Qt 5.9 -\b {Long-term support (LTS)}: Supported until May 31, 2020 - -//! [5.9] - - \table 80% - \header \li Platform \li Compiler \li Notes - \header \li {3,1} \l {Qt for Windows}{Windows} - \row \li Windows 10 (64-bit) - \li \b {MSVC 2017}, \b {MSVC 2015}, MSVC 2013, MinGW 5.3 - \li - \row \li Windows 10 (32-bit) - \li \b {MSVC 2017}, \b {MSVC 2015}, MSVC 2013, MinGW 5.3 - \li - \row \li Windows 8.1 (64-bit) - \li MSVC 2017, MSVC 2015, \b {MSVC 2013}, MinGW 5.3 - \li - \row \li Windows 8.1 (32-bit) - \li MSVC 2017, MSVC 2015, MSVC 2013, MinGW 5.3 - \li - \row \li Windows 7 (64-bit) - \li MSVC 2017, MSVC 2015, MSVC 2013, \b {MinGW 5.3} - \li - \row \li Windows 7 (32-bit) - \li MSVC 2017, MSVC 2015, MSVC 2013, MinGW 5.3 - \li \l{https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.3.0/threads-posix/dwarf/i686-5.3.0-release-posix-dwarf-rt_v4-rev0.7z/download}{MinGW-builds gcc 5.3.0 (32-bit)} - - \row \li {3,1} \header \li {3,1} Universal Windows Platform (UWP) - \row \li UWP 10 (x86, \b x86_64, armv7) - \li MSVC 2017, \b {MSVC 2015} - \li Hosts: \b {Windows 10} - - \row \li {3,1} \header \li {3,1} \l {Qt for Linux/X11}{Linux/X11} - \row \li openSUSE 42.1 (64-bit) - \li \b {GCC 4.8.5} - \li - \row \li Red Hat Enterprise Linux 6.6 (64-bit) - \li \b {GCC 4.9.1} - \li devtoolset-3 - \row \li Red Hat Enterprise Linux 7.2 (64-bit) - \li \b {GCC 5.3.1} - \li devtoolset-4 - \row \li Ubuntu 16.04 (64-bit) - \li \b {GCC as provided by Canonical} - \li - \row \li (Linux 32/64-bit) - \li GCC 4.8, GCC 4.9, GCC 5.3 - \li - - \row \li {3,1} \header \li {3,1} \l {Qt for macOS}{\macos} - \row \li \macos \b 10.10, \b 10.11, \b 10.12 - \li \b {Clang as provided by Apple} - \li - - \row \li {3,1} \header \li {3,1} - Embedded Platforms: \l {Qt for Embedded Linux}{Embedded Linux}, \l {QNX}, \l {INTEGRITY}\br - \l {Qt for VxWorks}{VxWorks} is available through Qt Professional Services - \row \li \l {Qt for Embedded Linux}{Embedded Linux} - \li GCC \li ARM Cortex-A, Intel boards with GCC-based toolchains - \row \li QNX 6.6 (armv7le and x86), 7.0 (armv7le, arm64 and x86) - \li \b {GCC as provided by QNX} - \li Hosts: \b {RHEL 6.6 (64-bit)}, \b {RHEL 7.2 (64-bit)}, - \b {Windows 10 (64-bit)}, \b {Windows 7 (32-bit)} - \row \li \l {INTEGRITY} {INTEGRITY 11.4.x} - \li As provided by Green Hills INTEGRITY - \li Hosts: 64-bit Linux - \row \li \l{Qt for VxWorks}{VxWorks 7} - \li As provided by Wind River - \li Hosts: 64-bit Linux, Windows - - \row \li {3,1} \header \li {3,1} - Mobile Platforms: \l {Qt for Android}{Android}, \l {Qt for iOS}{iOS} - \row \li iOS 8, 9, 10 (armv7, arm64) - \li \b {Clang as provided by Apple} - \li \b {\macos 10.10 host} - \row \li Android (API Level: 16) - \li \b {GCC as provided by Google}, \b {MinGW 5.3} - \li Hosts: \b {RHEL 7.2 (64-bit)}, \b{\macos 10.12}, \b {Windows 7 (64-bit)} - \endtable - -//! [5.9] - -\section1 Qt 5.8 - -//! [5.8] - \b {Supported until Jan 23, 2018} - - \table 80% - \header \li Platform \li Compiler \li Notes - \header \li {3,1} \l {Qt for Windows}{Windows} - \row \li Windows 10 (64-bit) - \li \b {MSVC 2015}, MSVC 2013, MinGW 5.3, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 10 (32-bit) - \li \b {MSVC 2015}, MSVC 2013, MinGW 5.3, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 8.1 (64-bit) - \li MSVC 2015, \b {MSVC 2013}, MinGW 5.3, MinGW 4.9, - MinGW 4.8 - \li - \row \li Windows 8.1 (32-bit) - \li MSVC 2015, \b {MSVC 2013}, MinGW 5.3, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 7 (64-bit) - \li MSVC 2015, MSVC 2013, MinGW 5.3, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 7 (32-bit) - \li MSVC 2015, MSVC 2013, \b {MinGW 5.3}, MinGW 4.9, - MinGW 4.8 - \li \l{https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.3.0/threads-posix/dwarf/i686-5.3.0-release-posix-dwarf-rt_v4-rev0.7z/download}{MinGW-builds gcc 5.3.0 (32-bit)} - - \row \li {3,1} \header \li {3,1} \l {Qt for Linux/X11}{Linux/X11} - \row \li openSUSE 42.1 (64-bit) - \li \b {GCC 4.8.5} - \li - \row \li Red Hat Enterprise Linux 6.6 (64-bit) - \li \b {GCC 4.9.1} - \li Red Hat 4.9.1-10 20140922 - \row \li Red Hat Enterprise Linux 7.2 (64-bit) - \li \b {GCC 5.3.1} - \li Red Hat 5.3.1-6 20160406 - \row \li Ubuntu 14.04 (64-bit) - \li \b {GCC 4.8.2} - \li Ubuntu 4.8.2-19ubuntu1 - \row \li (Linux 32/64-bit) - \li GCC 4.8, GCC 4.9, GCC 5.3 - \li - - \row \li {3,1} \header \li {3,1} \l {Qt for macOS}{\macos} - \row \li \macos \b 10.9, \b 10.10, \b 10.11, \b 10.12 - \li \b {Clang as provided by Apple} - \li - - \row \li {3,1} \header \li {3,1} - Embedded Platforms: \l {Qt for Embedded Linux}{Embedded Linux}, \l {QNX} - \row \li \l {Qt for Embedded Linux}{Embedded Linux} - \li GCC \li ARM Cortex-A, Intel boards with GCC-based toolchains - \row \li QNX 6.6.0 (armv7le and x86) - \li \b {As provided by QNX} - \li Hosts: \b {Ubuntu 14.04 (64-bit)}, Windows - - \row \li {3,1} \header \li {3,1} - \include supported-platforms.qdocinc mobile - \row \li Windows Phone 8.1 (arm) - \li \b {MSVC 2013} - \li Hosts: \b {Windows 8.1}, Windows 10 - \row \li Windows Runtime (x86, \b x86_64, arm) - \li \b {MSVC 2013} - \li Hosts: \b {Windows 8.1}, Windows 10 - \row \li Universal Windows Platform (UWP) (x86, \b x86_64, arm) - \li \b {MSVC 2015} - \li Hosts: \b {Windows 10} - \row \li iOS 7 and above - \li \b {Clang as provided by Apple} - \li \b {\macos host} - \row \li Android (API Level: 16) - \li \b {GCC as provided by Google} - \li Hosts: \b {Ubuntu 14.04 (64-bit)}, \macos, Windows - \endtable - -//! [5.8] - - \section1 Qt 5.7 - -//! [5.7] - \b {Supported until June 15, 2017} - - \table 80% - \header \li Platform \li Compiler \li Notes - \header \li {3,1} \l {Qt for Windows}{Windows} - \row \li Windows 10 (64-bit) - \li \b {MSVC 2015}, MSVC 2013, MinGW 5.3, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 10 (32-bit) - \li MSVC 2015, MSVC 2013, MinGW 5.3, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 8.1 (64-bit) - \li MSVC 2015, \b {MSVC 2013}, MinGW 5.3, MinGW 4.9, - MinGW 4.8 - \li - \row \li Windows 8.1 (32-bit) - \li MSVC 2015, MSVC 2013, MinGW 5.3, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 7 (64-bit) - \li MSVC 2015, MSVC 2013, MinGW 5.3, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 7 (32-bit) - \li MSVC 2015, MSVC 2013, \b {MinGW 5.3}, MinGW 4.9, - MinGW 4.8 - \li \l{https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.3.0/threads-posix/dwarf/i686-5.3.0-release-posix-dwarf-rt_v4-rev0.7z/download}{MinGW-builds gcc 5.3.0 (32-bit)} - - \row \li {3,1} \header \li {3,1} \l {Qt for Linux/X11}{Linux/X11} - \row \li openSUSE 13.1 (64-bit) - \li \b {GCC 4.8.1} - \li SUSE Linux 20130909 - \row \li Red Hat Enterprise Linux 6.6 (64-bit) - \li \b {GCC 4.9.1} - \li Red Hat 4.9.1-10 20140922 - \row \li Ubuntu 14.04 (64-bit) - \li \b {GCC 4.6.3} - \li Ubuntu/Linaro 4.6.3-1ubuntu5 - \row \li (Linux 32/64-bit) - \li GCC 4.8.1, GCC 4.9.1 - \li - - \row \li {3,1} \header \li {3,1} \l {Qt for macOS}{\macos} - \row \li \macos \b 10.8, \b 10.9, \b 10.10, \b 10.11 - \li \b {Clang as provided by Apple} - \li - - \row \li {3,1} \header \li {3,1} - Embedded Platforms: \l {Qt for Embedded Linux}{Embedded Linux}, \l {QNX} - \row \li \l {Qt for Embedded Linux}{Embedded Linux} - \li GCC \li ARM Cortex-A, Intel boards with GCC-based toolchains - \row \li QNX 6.6.0 (armv7le and x86) - \li \b {As provided by QNX} - \li Hosts: \b {Ubuntu 14.04 (64-bit)}, Windows - - \row \li {3,1} \header \li {3,1} - \include supported-platforms.qdocinc mobile - \row \li Windows Phone 8.1 (arm) - \li \b {MSVC 2013} - \li Hosts: \b {Windows 8.1}, Windows 10 - \row \li Windows Runtime (x86, \b x86_64, arm) - \li \b {MSVC 2013} - \li Hosts: \b {Windows 8.1}, Windows 10 - \row \li Universal Windows Platform (x86, \b x86_64, arm) - \li \b {MSVC 2015} - \li Hosts: \b {Windows 10} - \row \li iOS 6 and above - \li \b {Clang as provided by Apple} - \li \b {\macos host} - \row \li Android (API Level: 16) - \li \b {GCC as provided by Google} - \li Hosts: \b {Ubuntu 14.04 (64-bit)}, \macos, Windows - \endtable - -//! [5.7] - - \section1 Qt 5.6 - -//! [5.6] - \b {Long-term support (LTS)}: Supported until Mar. 16, 2019 - - \table 80% - \header \li Platform \li Compiler \li Notes - \header \li {3,1} \l {Qt for Windows}{Windows} - \row \li Windows 10 (64-bit) - \li \b {MSVC 2015}, MSVC 2013, MSVC 2012, MSVC 2010, MinGW 4.9, - MinGW 4.8 - \li - \row \li Windows 10 (32-bit) - \li MSVC 2015, MSVC 2013, MSVC 2012, MSVC 2010, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 8.1 (64-bit) - \li MSVC 2015, \b {MSVC 2013}, \b {MSVC 2012}, MSVC 2010, MinGW 4.9, - MinGW 4.8 - \li - \row \li Windows 8.1 (32-bit) - \li MSVC 2015, MSVC 2013, MSVC 2012, MSVC 2010, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 7 (64-bit) - \li MSVC 2015, MSVC 2013, MSVC 2012, MSVC 2010, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 7 (32-bit) - \li MSVC 2015, MSVC 2013, MSVC 2012, \b {MSVC 2010}, \b {MinGW 4.9}, - MinGW 4.8 - \li \l{http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.9.1/threads-posix/dwarf/i686-4.9.1-release-posix-dwarf-rt_v3-rev2.7z/download}{MinGW-builds gcc 4.9.1 (32-bit)} - \row \li Windows Vista (32/64-bit) - \li \li Deployment only - \row \li Windows XP (32-bit) - \li \li Deployment only - - \row \li {3,1} \header \li {2,1} \l {Qt for Linux/X11}{Linux/X11} - \li \l {Known Issues with GCC Compilers}{Known Issues} - \row \li openSUSE 13.1 (64-bit) - \li \b {GCC 4.8.1} - \li SUSE Linux 20130909 - \row \li Red Hat Enterprise Linux 6.6 (64-bit) - \li \b {GCC 4.9.1} - \li Red Hat 4.9.1-10 20140922 - \row \li Ubuntu 14.04 (64-bit) - \li \b {GCC 4.6.3} - \li Ubuntu/Linaro 4.6.3-1ubuntu5 - \row \li (Linux 32/64-bit) - \li GCC 4.8.1, GCC 4.9.1 - \li - - \row \li {3,1} \header \li {3,1} \l {Qt for macOS}{\macos} - \row \li \macos \b 10.8, \b 10.9, \b 10.10, 10.11 - \li \b {Clang as provided by Apple} - \li - \row \li \macos 10.7 - \li \li Deployment only - - \row \li {3,1} \header \li {3,1} - \include supported-platforms.qdocinc embedded - \row \li \l {Qt for Embedded Linux}{Embedded Linux} - \li GCC \li ARM Cortex-A, Intel boards with GCC-based toolchains - \row \li QNX 6.6.0 (armv7le and x86) - \li \b {As provided by QNX} - \li Hosts: \b {Ubuntu 14.04 (64-bit)}, Windows - \row \li Windows Embedded 7 (armv4i) - \li MSVC 2008 - \li Windows 7 host - - \row \li {3,1} \header \li {3,1} - \include supported-platforms.qdocinc mobile - \row \li Windows Phone 8.1 (arm) - \li \b {MSVC 2013} - \li Hosts: \b {Windows 8.1}, Windows 10 - \row \li Windows Runtime (x86, \b x86_64, arm) - \li MSVC 2015, \b {MSVC 2013} - \li Hosts: \b {Windows 8.1}, Windows 10 - \row \li iOS 6 and above - \li \b {Clang as provided by Apple} - \li \b {\macos host} - \row \li Android (API Level: 9) - \li \b {GCC as provided by Google} - \li Hosts: \b {Ubuntu 14.04 (64-bit)}, \macos, Windows - \endtable - -//! [5.6] - - \section1 Qt 5.5 -//! [5.5] - \b {Supported until Mar. 16, 2018} - - \table 80% - \header \li Platform \li Compiler \li Notes - \header \li {3,1} \l {Qt for Windows}{Windows} - \row \li Windows 8.1 (64-bit) - \li \b {MSVC 2013}, \b {MSVC 2012}, MSVC 2010, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 8.1 (32-bit) - \li MSVC 2013, MSVC 2012, MSVC 2010, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 7 (64-bit) - \li MSVC 2013, MSVC 2012, MSVC 2010, MinGW 4.9, MinGW 4.8 - \li - \row \li Windows 7 (32-bit) - \li MSVC 2013, MSVC 2012, \b {MSVC 2010}, \b {MinGW 4.9}, \b {MinGW 4.8} - \li - \row \li Windows Vista (32/64-bit) - \li MSVC 2013, MSVC 2012, MSVC 2010, MinGW 4.8 - \li - \row \li Windows XP (32-bit) - \li \li Deployment only +\section1 Desktop Platforms +//! [desktop] + +\section2 \l{Qt for Linux/X11}{Linux/X11} +//! [linux] +\table 80% + \header \li Distribution \li Architecture \li Compiler \li Notes + \row \li openSUSE 42.2 + \li \c x86_64 + \li GCC 4.8, \b {GCC 7}, \b {ICC} + \li + \row \li Red Hat Enterprise Linux 6.6 + \li \c x86_64 + \li GCC 4.9.1 + \li devtoolset-3 + \row \li Red Hat Enterprise Linux 7.2 + \li \c x86_64 + \li \b {GCC 5.3.1} + \li devtoolset-4 + \row \li Ubuntu 16.04 + \li \c x86_64 + \li GCC as provided by Canonical, \b {GCC 5.4.0} + \li + \row \li Generic Linux + \li \c x86 and \c x86_64 + \li GCC 4.8, GCC 4.9, GCC 5, GCC 6, GCC 7 + \li +\endtable +//! [linux] + +\section2 \l{Qt for macOS}{\macos} +//! [macos] +\table 80% + \header \li Deployment Platform \li Architecture \li Development Environment + \row \li \macos 10.12, 10.13, \b 10.14 + \li \c x86_64 and \c x86_64h + \li \b {Xcode 10} (10.14 SDK) +\endtable +//! [macos] + +\section2 \l{Qt for Windows}{Windows} +//! [windows] +\table 80% + \header \li Operating System \li Architecture \li Compiler \li Notes + \row \li Windows 10 + \li \c x86 and \c x86_64 + \li \b {MSVC 2017}, \b {MSVC 2015}, MinGW 5.3 + \li Tested on \e {Windows 10 Creators Update} + \row \li Windows 8.1 + \li \c x86 and \c x86_64 + \li MSVC 2017, \b {MSVC 2015}, MinGW 5.3 + \li + \row \li Windows 7 + \li \c x86 and \c x86_64 + \li MSVC 2017, MSVC 2015, \b {MinGW 5.3} + \li \l{https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.3.0/threads-posix/dwarf/i686-5.3.0-release-posix-dwarf-rt_v4-rev0.7z/download}{MinGW-builds gcc 5.3.0 (x86)} +\endtable + +\br +\l{Qt for WinRT} can also be used to build applications for Window desktop platforms. + +//! [windows] + +//! [desktop] + +\section1 Mobile Platforms +//! [mobile] - \row \li {3,1} \header \li {2,1} \l {Qt for Linux/X11}{Linux/X11} - \li \l {Known Issues with GCC Compilers}{Known Issues} - \row \li openSUSE 13.1 (64-bit) - \li \b {GCC 4.8.1} - \li SUSE Linux 20130909 - \row \li Red Hat Enterprise Linux 6.6 (64-bit) - \li \b {GCC 4.9.1} - \li Red Hat 4.9.1-10 20140922 - \row \li Ubuntu 14.04 (64-bit) - \li \b {GCC 4.6.3} - \li Ubuntu/Linaro 4.6.3-1ubuntu5 - \row \li Linux (32/64-bit) - \li GCC 4.8.1, GCC 4.9.1 - \li +\section2 \l{Qt for Android}{Android} +//! [android] +\table 80% + \header \li Platform Version \li Architecture \li Compiler \li Development Environment + \row \li Android 4.1, 5, 6, 7, 8 (API Level 16) + \li \c armv7 and \c x86 + \li \b {GCC as provided by Google}, \b {MinGW 5.3} + \li \b {RHEL 7.2 (x86_64)}, \b{\macos 10.12}, \b {Windows 7 (x86_64)} +\endtable +//! [android] + +\section2 \l{Qt for iOS}{iOS/tvOS/watchOS} +//! [ios] +\table 80% + \header \li Deployment Platform \li Architecture \li Development Environment \li Notes + \row \li iOS 11, \b{iOS 12} + \li \c armv8 (\c arm64) + \li \b {Xcode 10} (iOS 12 SDK) + \li + \row \li tvOS 11, \b{tvOS 12} + \li \c armv8 (\c arm64) + \li \b {Xcode 10} (tvOS 12 SDK) + \li Technology Preview + \row \li watchOS 4, \b{watchOS 5} + \li \c armv7k + \li \b {Xcode 10} (watchOS 5 SDK) + \li Technology Preview. No UI. +\endtable +//! [ios] + +\section2 \l{Qt for WinRT}{WinRT} +//! [winrt] +\table 80% + \header \li Platform Version \li Architecture \li Compiler \li Development Environment + \row \li Universal Windows Platform 10 + \li \c x86, \c x86_64, and \c armv7 + \li \b{MSVC 2017}, \b{MSVC 2015} + \li \b{Windows 10} Creators Update +\endtable +//! [winrt] - \row \li {3,1} \header \li {3,1} \l {Qt for macOS}{\macos} - \row \li \macos 10.8, \b 10.9, \b 10.10 - \li \b clang-600.0.54 - \li - \row \li \macos 10.7 - \li i686-apple-darwin11-llvm-gcc-4.2 - \li +//! [mobile] - \row \li {3,1} \header \li {3,1} - \include supported-platforms.qdocinc embedded - and VxWorks (under a commercial license) - \row \li Embedded Linux (arm-gnueabi) - \li \b {arm-none-linux-gnueabi-gcc-4.4.1} - \li Sourcery G++ Lite 2010q1-202, Ubuntu 14.04 (32-bit) host - \row \li Embedded Linux (iMX.6-armv7a) - \li \b {arm-none-linux-gnueabi-gcc-4.4.1} - \li Sourcery G++ Lite 2010q1-202, Ubuntu 14.04 (64-bit) host - \row \li QNX 6.6.0 (armv7le and x86) - \li \b {As provided by QNX} - \li Hosts: \b {Ubuntu 14.04 host (64-bit)}, Windows - \row \li Windows Embedded 7 (armv4i) - \li \b {MSVC 2008} - \li Windows 7 host +\section1 Embedded Platforms +//! [embedded] - \row \li {3,1} \header \li {3,1} - \include supported-platforms.qdocinc mobile - \row \li Windows Phone 8.1 (arm) - \li \b {MSVC 2013} - \li Hosts: \b {Windows 8.1}, Windows 10 - \row \li Windows Runtime (x86, \b x86_64, arm) - \li MSVC 2015, \b {MSVC 2013} - \li Hosts: \b {Windows 8.1}, Windows 10 - \row \li iOS 5.1.1 and above - \li \b {Clang as provided by Apple} - \li \b {\macos host} - \row \li Android - \li \b {GCC as provided by Google} - \li Hosts: \b {Ubuntu 14.04 (64-bit)}, \macos, Windows - \endtable +For embedded platform support, including \l{Qt for Embedded Linux}{Embedded Linux}, +\l{Qt for INTEGRITY}{INTEGRITY}, \l{Qt for QNX}{QNX}, and \l{Qt for VxWorks}{VxWorks}, +please consult the \l {http://doc.qt.io/QtForDeviceCreation}{Qt for Device Creation} +documentation. -//! [5.5] +//! [embedded] //! [all] + */ diff --git a/doc/src/platforms/webgl.qdocinc b/doc/src/platforms/webgl.qdoc index fbff33e1..07f0d791 100644 --- a/doc/src/platforms/webgl.qdocinc +++ b/doc/src/platforms/webgl.qdoc @@ -25,16 +25,16 @@ ** ****************************************************************************/ /*! -//! [webgl] +\page webgl.html +\title Qt Quick WebGL +\brief A platform plugin that enables streaming or Qt Quick user interfaces + using WebGL™. +\ingroup supportedplatform -\section1 Qt Quick WebGL - -The \e {Qt Quick WebGL} platform plugin allows for remote access by streaming -Qt Quick user interfaces over the network. The UI is rendered in a -WebGL™-enabled client browser. - -\note The Qt Quick WebGL plugin is currently provided as a - \e {Technology Preview}. +The \e {Qt Quick WebGL} is a \l {Qt Platform Abstraction} {platform plugin} +that allows for single-user remote access by streaming \l [QtQuick] {Qt Quick} +user interfaces over the network. The UI is rendered in a +\l {https://www.khronos.org/webgl/}{WebGL™}-enabled client browser. \section2 Configuration and Use @@ -45,9 +45,9 @@ OpenGL ES 2 support: ./configure [...] -opengl es2 \endcode -The plugin depends on \l {Qt WebSockets}. +The plugin has a dependency to \l {Qt WebSockets}. -You launch a Qt Quick application with the \e webgl platform plugin as +Any Qt Quick application can be launched with the \e webgl platform plugin as follows: \badcode @@ -62,7 +62,8 @@ port can be configured as follows: ./qmlapplication -platform webgl:port=80 \endcode -Keyboard, mouse, touch, and multi-touch events from the client are supported. +Keyboard, mouse, touch, and multi-touch events from the client are passed to +the application. \section2 Limitations @@ -92,6 +93,4 @@ Keyboard, mouse, touch, and multi-touch events from the client are supported. \badcode set QSG_RENDER_LOOP=threaded \endcode - -//! [webgl] */ diff --git a/doc/src/platforms/windows.qdoc b/doc/src/platforms/windows.qdoc index ba32add3..458a7016 100644 --- a/doc/src/platforms/windows.qdoc +++ b/doc/src/platforms/windows.qdoc @@ -26,42 +26,26 @@ ****************************************************************************/ /*! - \page windows-support.html + \page windows.html \title Qt for Windows \brief Platform support for Windows. \ingroup supportedplatform Qt's support for different Windows platforms is extensive and mature. - Before you get started, ensure that your development environment fulfills - the \l{Qt for Windows - Requirements}{requirements}. - - The \e{Reference Configuration} section of the - \l{Community Supported Platforms#Reference Configurations}{supported platforms} - page contains a list of Windows versions and compilers tested to work with - Qt. - \section1 Downloading and Installing Qt - - There are two ways to install Qt: - \list 1 - \li through the Qt Installers - downloads and installs Qt - \li through the \e{Qt sources}. - \endlist + Before you get started, + ensure that your development environment fulfills + the \l{Qt for Windows - Requirements}{requirements}. - You can download the Qt 5 installers and sources from the \l Downloads page. - For more information, visit the \l{Getting Started with Qt} page. + To download and install Qt for Windows, follow the instructions on the + \l{Getting Started with Qt} page. - \section2 Building Qt 5 from Source + \target windows-supported-configurations + \section1 Supported Configurations - You can also build Qt 5 from the source package and configure it according - to your target platform. The source packages are obtained from - \l{http://www.qt.io/download/}. + The following configurations are supported. - Below, you will find more information about building Qt from source. - \list - \li \l{Qt for Windows - Requirements} - \li \l{Qt for Windows - Building from Source} - \endlist + \include supported-platforms.qdocinc windows \section1 Deployment and Other Issues @@ -428,7 +412,7 @@ For more information about the MinGW builds, visit the \e{Reference Configuration} section of the - \l{Community Supported Platforms#Reference Configurations}{supported platforms} + \l{Supported Platforms#Reference Configurations}{supported platforms} page. \section2 Clang(clang-cl) diff --git a/doc/src/platforms/winrt.qdoc b/doc/src/platforms/winrt.qdoc index d42839a9..db45871e 100644 --- a/doc/src/platforms/winrt.qdoc +++ b/doc/src/platforms/winrt.qdoc @@ -44,6 +44,13 @@ run in a sandboxed environment for security reasons and support different architectures, such as ARM and x86. + \target winrt-supported-configurations + \section1 Supported Configurations + + The following configurations are supported. + + \include supported-platforms.qdocinc winrt + \section1 Requirements Development for Windows Runtime requires a Microsoft Windows development host. diff --git a/doc/src/qmlapp/deployment.qdoc b/doc/src/qmlapp/deployment.qdoc index 676e28e1..a370aabb 100644 --- a/doc/src/qmlapp/deployment.qdoc +++ b/doc/src/qmlapp/deployment.qdoc @@ -74,11 +74,9 @@ mmap() system call on POSIX compliant operating systems or \c CreateFileMapping() on Windows, resulting in significant memory savings. Each time you load a changed QML document, the cache is automatically -re-created. Cache files are located in the same directory as the source code, -if the directory is writable. Otherwise they will be placed in a sub-directory -of QStandardPaths::CacheLocation with the name "qmlcache". The file extension -is \c .qmlc for QML documents and \c .jsc for imported JavaScript modules. -On the Android platform, cache files are always stored in the cache directory. +re-created. Cache files are located in a sub-directory of +QStandardPaths::CacheLocation with the name "qmlcache". The file extension is \c +.qmlc for QML documents and \c .jsc for imported JavaScript modules. \section1 Compiling QML Ahead of Time diff --git a/doc/src/qmlapp/usecases/styling.qdoc b/doc/src/qmlapp/usecases/styling.qdoc index 9c17ca25..74b51d61 100644 --- a/doc/src/qmlapp/usecases/styling.qdoc +++ b/doc/src/qmlapp/usecases/styling.qdoc @@ -35,7 +35,7 @@ Qt Quick's \l{Models and Views in Qt Quick}{delegates} the visual type attaches to the \e delegate property. When using \l{Qt Quick Controls}, the controls automatically set -the appropriate style from the respective \l{Community Supported Platforms}{platforms}. +the appropriate style from the respective \l{Supported Platforms}{platforms}. \section1 Using the Styling QML Types diff --git a/doc/src/qmlapp/usecases/userinput.qdoc b/doc/src/qmlapp/usecases/userinput.qdoc index d8e066ae..1ffbe6b8 100644 --- a/doc/src/qmlapp/usecases/userinput.qdoc +++ b/doc/src/qmlapp/usecases/userinput.qdoc @@ -29,33 +29,35 @@ \title Use Case - Responding To User Input in QML \brief Example of how to accept user input and respond to it in a QML application -\section1 Supported Types of User Input +\section1 Supported types of user input The \l {Qt Quick} module provides support for the most common types of user input, -including mouse and touch events, text input and key-press events. Other -modules provide support for other types of user input (for example, the -\l {Qt Sensors} module provides support for shake-gestures in QML applications). +including mouse and touch events, text input, and key-press events. Other +modules provide support for other types of user input for example, the +\l {Qt Sensors} module provides support for shake-gestures in QML applications. This article covers how to handle basic user input; for further information -about motion-gesture support, please see the \l {Qt Sensors} documentation. For -information about audio-visual input, please see the \l {Qt Multimedia} documentation. +about motion-gesture support, see the \l {Qt Sensors} documentation. For +information about audio-visual input, see the \l {Qt Multimedia} documentation. -\section2 Mouse and Touch Events +\section2 Mouse and touch events -The \l MouseArea type allows mouse and touch events to be handled in a QML -application. A \l MouseArea can be combined with either an \l Image or a -\l Rectangle and \l Text object to implement a simple button. +The \l{Input Handlers}{input handlers} let QML applications handle mouse and +touch events. For example, you could create a button by adding a +\l TapHandler to an Image, or to a \l Rectangle with a \l Text object inside. +The \l TapHandler responds to taps or clicks on any type of pointing device. \snippet qmlapp/usecases/userinput.qml 0 -For more advanced use cases requiring multiple touch points, please read the -documentation for the \l MultiPointTouchArea type and the \l PinchArea type. +For more advanced use cases such as, drag, pinch and zoom gestures, see +documentation for the \l DragHandler and \l PinchHandler types. -Note that some types have their own built in input handling. For example, -\l Flickable responds to mouse dragging, mouse wheel scrolling, touch dragging, -and touch flicking by default. +\note Some types have their own built-in input handling. For example, +\l Flickable responds to mouse dragging and mouse wheel scrolling. It handles +touch dragging and flicking via synthetic mouse events that are created when +the touch events are not handled. -\section2 Keyboard and Button Events +\section2 Keyboard and button events Button and key presses, from buttons on a device, a keypad, or a keyboard, can all be handled using the \l Keys attached property. This attached property @@ -65,19 +67,12 @@ to true on a single \l Item and do all your key handling there. \snippet qmlapp/usecases/userinput-keys.qml 0 -For text input the \l {Qt Quick} module provides several built-in types. -In particular, the \l TextInput and \l TextEdit types allow for single-line -entry and multi-line editing respectively. +For text input, we have several QML types to choose from. TextInput provides an +unstyled single-line editable text, while TextField is more suitable for +form fields in applications. TextEdit can handle multi-line editable text, +but TextArea is a better alternative as it adds styling. -Here is all you need to get a working TextInput: - -\code -import QtQuick 2.3 - -TextInput { - focus: true - text: "Initial Text" -} -\endcode +The following snippet demonstrates how to use these types in your application: +\snippet qmlapp/usecases/userinput-text.qml 0 */ diff --git a/doc/src/qtmodules.qdoc b/doc/src/qtmodules.qdoc index 0dca75c3..42f2989f 100644 --- a/doc/src/qtmodules.qdoc +++ b/doc/src/qtmodules.qdoc @@ -36,9 +36,10 @@ \section1 Qt Essentials - Qt essentials define the foundation of Qt on all platforms. They are + Qt Essentials define the foundation of Qt on all platforms. They are available on all supported development platforms and on the tested target - platforms. They will remain source and binary compatible during Qt 5. + platforms. Except the testing modules, which will remain source compatible, + these modules will remain source and binary compatible throughout Qt 5. Essential modules are general and useful for a majority of Qt applications. A module that is used for a special purpose is considered an add-on module @@ -89,12 +90,16 @@ \li \l[QtQuickTest]{Qt Quick Test} \li A unit test framework for QML applications, where the test cases are written as JavaScript functions. + \note The binary compatibility guarantee does not apply to Qt Quick + Test. However, it will remain source compatible. \row \li \l[QtSql]{Qt SQL} \li Classes for database integration using SQL. \row \li \l[QtTestLib]{Qt Test} \li Classes for unit testing Qt applications and libraries. + \note The binary compatibility guarantee does not apply to Qt Test. + However, it will remain source compatible. \row \li \l[QtWidgets]{Qt Widgets} \li Classes to extend Qt GUI with C++ widgets. @@ -143,12 +148,6 @@ \li Functionality for near-realtime simulation systems with support for 2D and 3D rendering. \row - \li \l{Enginio Manual}{Enginio} (Deprecated) - \li All - \li All - \li A Backend-as-a-Service solution to ease the backend development for - connected and data-driven applications. - \row \li \l[QtAndroidExtras]{Qt Android Extras} \li All \li \l{Qt for Android}{Android} @@ -157,7 +156,8 @@ \li \l[QtBluetooth]{Qt Bluetooth} \li All \li \l{Qt for Android}{Android}, - \l{Qt for iOS}{iOS}, \l{Qt for Linux/X11}{Linux} and \l{Qt for macOS}{\macos} + \l{Qt for iOS}{iOS}, \l{Qt for Linux/X11}{Linux}, \l{Qt for macOS}{\macos}, and + \l{Qt for WinRT}{WinRT} \li Provides access to Bluetooth hardware. \row \li \l[QtCanvas3D]{Qt Canvas 3D} @@ -261,6 +261,13 @@ \li Provides a specialized set of controls that can be used to build interfaces in Qt Quick. \row + \li \l {Qt Quick WebGL} + \li All + \li WebGL-enabled web browsers + \li Provides a \l {Qt Platform Abstraction} {platform plugin} that + allows streaming Qt Quick user interfaces over the network using + WebGL™. + \row \li \l{Qt Quick Widgets C++ Classes}{Qt Quick Widgets} \li All \li diff --git a/doc/src/userinterfaces.qdoc b/doc/src/userinterfaces.qdoc index aa99c28d..3148e099 100644 --- a/doc/src/userinterfaces.qdoc +++ b/doc/src/userinterfaces.qdoc @@ -88,7 +88,7 @@ For more about how to create application user interfaces with QML, visit the \l {Qt Widgets} are traditional user interface elements that are typically found in desktop environments. The widgets integrate well to the underlying platform -providing native look'n'feel on Windows, Linux and Mac OSX. The widgets are mature +providing native look'n'feel on Windows, Linux and \macos. The widgets are mature and feature rich user interface elements suitable for mostly static user interfaces. In contrast to \l {Qt Quick}, the widgets do not scale that well for touch screens and fluid, highly animated modern user interfaces. The widgets are a good choice diff --git a/doc/src/whatsnew/whatsnew512.qdoc b/doc/src/whatsnew/whatsnew512.qdoc new file mode 100644 index 00000000..33ed08f2 --- /dev/null +++ b/doc/src/whatsnew/whatsnew512.qdoc @@ -0,0 +1,418 @@ +/**************************************************************************** +** +** Copyright (C) 2018 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$ +** +****************************************************************************/ + +/*! + \page whatsnew512.html + \title What's New in Qt 5.12 + \brief Lists the new features in Qt 5.12. + + \section1 New Features in Qt 5.12 + + \section2 Qt Core Module + \list + \li Added the static \l {QCryptographicHash::hashLength} method. It + returns the length of a hash's output. + \li Added wildcardToRegularExpression helper method to + QRegularExpression for easier wildcard implementation in user code. + \li Added anchoredPattern helper method to QRegularExpression for + easier exact matching implementation in user code. + \li Added QRegularExpression support to QSortFilterProxyModel. + \li Support for CBOR data similar to existing JSON support. + \endlist + + \section2 Qt Network Module + \list + \li Added DTLS (Datagram Transport Layer Security) over UDP support. + \li Added renegotiation to Security Transport backend. + \li Added ALPN support and HTTP/2 protocol negotiation to Security + Transport backend. + \li Added PKCS#8 support in the generic SSL backend (WinRT and Secure + Transport). + \li Added QPasswordDigestor: a new namespace that contains + password-based key derivation functions (currently PBKDF1 and + PBKDF2). + \endlist + + \section2 Qt Widgets Module + \list + \li Added \l {QStyle::SH_SpinBox_StepModifier} style hint. + \li Added \l {QLineEdit::inputRejected} signal. + \li Added \l {Qt::WA_StyleSheetTarget} attribute. + \li Added \l {QLayout::indexOf(QLayoutItem *)} function. + \endlist + + \section2 Qt QML Module + \list + \li The JavaScript engine now supports + \l {http://www.ecma-international.org/ecma-262/7.0/}{ECMAScript 7}. + This includes an upgrade to ECMAScript 6, see + \l {http://es6-features.org/}{ECMAScript 6 - New Features: Overview + & Comparison}. + \li ECMAScript modules can now be loaded directly with + QJSEngine::importModule() and imported in .qml files when using the + .mjs file extension. + \endlist + + \section2 Qt Quick Module + \list + \li Pointer Handlers are renamed to Input Handlers (we include the + pre-existing Keys attached property in this category) and are now + fully supported as a first-class QML feature in Qt Quick. + (C++ API for them is still not public yet.) + \li HoverHandler is a new type of handler for detecting mouse hover. It + can detect hover even in cases of deep nesting: unlike MouseArea, + you can hover multiple nested Items with HoverHandlers in them at + the same time. (For example, a sidebar and an individual button on + the sidebar). + \li DragHandler is now a multi-point handler: if you set + minimumPointCount to \c 2, it will react only to a 2-finger drag, + for example. This can give you another degree of freedom: + single-finger drag can perform the typical item movement, and + 2-finger drag can do something else (change the tilt angle, for + example). + \li Added support for pregenerated distance field caches for faster + startup times. + \li Added TableView as another type of Item View: on par + with ListView but having multiple columns. Unlike the one in + QtQuick Controls 1.x, it does not do any styling; rather it + provides the optimal solution for instantiating (and pooling and + reusing) delegates on demand as you scroll through the rows and + columns. + \li Tech Preview: Added DelegateChooser as a means of choosing + different delegates in Item Views (such as TableView) depending on + role values from the model, or depending on the index. + \endlist + + \section2 Qt Quick Controls 2 Module + \list + \li Dial: Added inputMode property, that adds two new ways of + interacting with the Dial: horizontally and vertically. These new + input modes use a relative input system that adds changes to the + dial's position to its value. This results in a dial that is less + "jumpy", making it safe for operations that could be harmful if + done incorrectly, like adjusting audio levels. + \li Control and Popup: Added topInset, bottomInset, leftInset, and + rightInset properties to control the geometry of the background, + similarly to how paddings control the geometry of the contentItem. + \li Added implicit*Width and implicit*Height properties (for example, + implicitHeaderWidth, implicitContentWidth, and so on) to simplify + complex implicit size bindings. + \li SwipeView and DialogButtonBox: Added contentWidth and contentHeight + properties. + \li RangeSlider: + \list + \li Added the valueAt() function, which enables tooltips to show + up-to-date values for each handle when live is set to \c false + (copied from Slider). + \li Added first.moved() and second.moved() signals, similar to + Slider's moved() signal. + \endlist + \li Control: Unless explicitly specified, baselineOffset is now + automatically updated based on the top padding of the control and + the baselineOffset of the contentItem. Styles no longer need to + specify the baselineOffset in QML. + \li Popup: added anchors.centerIn to allow a convenient way of + centering a popup. + \li QQuickStyle: Added stylePathList() and addStylePath() methods for + managing the list of directories where Qt Quick Controls 2 searches + for available styles. + \li Slider and RangeSlider: Added touchDragThreshold property for + configuring the threshold to initiate the touch 'drag' of the + handle of the slider. The mouse 'drag' is not affected by the + property. + \li TextArea and TextField: Added placeholderTextColor property to + customize the placeholderText color to fit the backgrounds. + \li Material: Added a Dense variant of the Material style for use on + desktop platforms. Some controls are slightly smaller in height and + use smaller font sizes. The variant can be enabled by setting + QT_QUICK_CONTROLS_MATERIAL_VARIANT to Dense or setting + \c {Variant=Dense} in the qtquickcontrols2.conf file. + \li DialogButtonBox: Added buttonLayout property that can be used to + arrange the buttons. + \li Tumbler: Added positionViewAtIndex() function that calls the + respective PathView/ListView function, depending on the value of + wrap. This allows changing currentIndex without animations. + \li Control and Popup: Added horizontalPadding and verticalPadding + properties as convenient ways to set both left and right, or top + and bottom paddings in one go. + \li ToolTip: Added non-attached show() and hide() methods to give the + same level of convenience for showing non-attached tooltips with + certain parameters. + \endlist + + \section2 Qt 3D Module + \list + \li Load an animation from a file containing several animations, either + by name or index. + \li Enable stepped animation curves. + \li Fix for creation and re-parenting of QNodes in some circumstances. + \li Reflect loaded texture properties for frontend texture objects. + \li TextureImage no longer requires a texture as parent. + \li Reduce CPU usage when not in the simulation loop. + \li Enable EntityLoader to load from a Component or file. + \li Support rendering using OpenGL ES 3.1. + \li Performance and bug fixes in the renderer backend. + \endlist + + \section2 macOS-Specific + \list + \li Added support for QSurfaceType::MetalSurface. + \li Added support for QSurfaceType::VulkanSurface and QVulkanWindow, + using MoltenVK. + \endlist + + \section2 Qt Wayland Module + \list + \li Added support for xdg-shell stable (and deprecated unstable v5). + \li Made the default window decorations look nicer. + \li Added support for xdg-decoration-unstable-v1 for server-side window + decorations. + \endlist + + \section2 Qt Websockets Module + \list + \li Added the \l {QWebsocket::bytesToWrite} function. + \endlist + + \section2 Qt Location Module + \list + \li Updated MapboxGL plugin with QNX7 support. + \li Exposed add/remove transitions in MapItemView. + \li Updated MapItemView to inherit from MapItemGroup so that it can + nest itself. It can also be used as a delegate of itself. + \li Support populating the PlaceSearchModel incrementally, as opposed + to only switching pages. + \li Introduced Map.visibleArea, to restrict the visible area of the + map. + \li Updated the MapItem's geoShape property to be R/W, with a virtual + setter in the base class. + \li Added support for inner holes in QGeoPolygon. These are currently + honored, by MapPolygon, only with the MapboxGL plugin. Support in + the built-in renderer will follow. + \li Added support for Route legs. + \endlist + + \section2 Qt Test Module + \list + \li Updated std::tuple errors to provide better diagnostics when used + with QCompare. + \endlist + + \section2 Qt Labs Platform + \list + \li Menu, MenuItem, SystemTrayIcon: deprecated iconName and iconSource + in favor of icon.name and icon.source grouped properties. + \li Menu, MenuItem, SystemTrayIcon: added icon.mask grouped property. + \endlist + + \section2 Qt Virtual Keyboard Module + \list + \li Introduced an extension interface for the virtual keyboard. All the + current input methods and some special keyboard layouts (for + example, Hunspell, OpenWnn, and so on) have been moved to + extensions. The extension interface allows third parties to create + new input methods without having to modify or rebuild the virtual + keyboard. In addition, this change makes it possible to add + features and languages independently by copying the desired + extensions to the system. + \li Introduced a virtualkeyboard module, which can be linked against an + extension plugin. This module provides the C++ API necessary for + creating an input method. + \li Added option to exclude all styles from the plugin at build time. + \li Added support for MyScript Superimposed handwriting recognition. + MyScript supports the recognition of isolated character, cursive, + print and superimposed writing. In addition, it enables the + recognition of letters, words or parts of words written one over + the other, without any explicit separation between consecutive + fragments. It targets small devices with sufficient hardware + capabilities in terms of CPU power and memory. + \li Added Vietnamese handwriting recognition (T9 Write). + \li Added new layouts: Albanian, American English, Brazilian Portuguese, + French Canadian, Indonesian, Malay, Mexican Spanish, Slovak, + Slovenian, Thai, Turkish, Vietnamese, and Ukrainian. + \li Added latin extra layout for Russian. + \li The pinyin and tcime dictionaries are now bundled in the plugin by + default. + \li Added user dictionary and learning for Hunspell. + \endlist + + \section2 Qt WebEngine Module + \list + \li Updated to Chromium 69. + \li Added QWebEngineUrlScheme interface to configure type and security + of custom URL schemes. + \li WebActions are now exposed in QML. + \li The view or page that triggered a download can now be read from + download items. + \li Support client SSL certificates, in so far as the operating system + supports them. + \endlist + + \section2 Qt GUI Module + \list + \li Added presets for QGradient based on https://webgradients.com/. + \li Added 4xU16 RGBA64 formats to QImage, reading them from PNGs, and + uploading or grabbing them from OpenGL. + \li Added support to Windows UI Automation to the WinRT QPA, allowing + Qt-based UWP applications to operate with accessibility and + programmatic UI control tools. + \li Replaced the handling of tablet/touchscreen/touchpad/mouse input + with a unified implementation based on the Windows Pointer Input + Messages on Windows 8 and newer. Hardware such as the screen + digitizer in the MS Surface line is now supported without special + drivers. + \endlist + + \section2 Qt Serial Bus Module + \list + \li Added a virtual CAN bus plugin for simulation without CAN hardware. + \li Added configuration options to canbusutil, for example for bitrate + setting. + \li Added CAN FD functionality to the PeakCAN plugin. + \li Added the \l {QCanBusDevice::readAllFrames}{readAllFrames()} and + \l {QCanBusDevice::clear}{clear()} functions to QCanBusDevice. + \endlist + + \section2 Qt Bluetooth Module + \list + \li Added manufacturer data to the QBluetoothDeviceInfo objects that + are emitted from the BLE discovery agent. Decoding iBeacon payloads + is still up to the application. + \endlist + + \section2 Qt for Automation Offering + \list + \li Qt MQTT now has full support for MQTT protocol level 5. + \li Qt KNX + \list + \li Support for KNXnet/IP Core Version 2. + \li Support for KNXnet/IP Routing Version 1. + \li Support for KNXnet/IP Tunneling Version 2. + \li Support for KNXnet/IP communication via TCP. + \li Tech Preview: Basic support for KNXnet/IP Secure Protocol. + \endlist + \li Qt OPC UA (Tech Preview) + \list + \li Support for events. + \li Added a batch read API. + \li Added a batch write API. + \li Added a TranslateBrowsePathsToNodeIds API. + \li Improved browse API. + \li Support for the Argument and ExpandedNodeId types. + \li Nodes can now be instantiated from an ExpandedNodeId. + \li Support for multi-dimensional arrays has been fixed. + \li Support reading and writing of extension objects. + \endlist + \endlist + + \section1 New Modules + \list + \li Qt Remote Objects is now fully supported. + \endlist + + \section1 Platform Changes + \list + \li QTimeZone + \list + \li Now uses ICU, when available, in preference to Microsoft's + native APIs. + \endlist + \endlist + + \section1 Technology Preview Modules + \list + \li Qt WebGL Streaming Plugin (TP3) - Stream applications to browsers + over the network. + \li Qt for WebAssembly (TP2) - Compile Qt applications to run inside + web browsers using WebAssembly. + \endlist + + \section1 Deprecated Modules + The following modules are part of the Qt 5.12 release, but are deprecated + and considered for removal in subsequent releases of Qt: + + \list + \li Qt Script + \li Qt Quick Controls 1 + \li Qt Canvas 3D + \endlist + + \section1 List of API Changes + The pages below contain a list of API changes in Qt 5.12: + \list + \li \l{New Classes and Functions in Qt 5.12} + \li \l{Obsolete Classes} + \endlist + + \section1 Additions to Other Qt 5 Releases + + \list + \li \l{What's New in Qt 5.11} + \li \l{What's New in Qt 5.10} + \li \l{What's New in Qt 5.9} + \li \l{What's New in Qt 5.8} + \li \l{What's New in Qt 5.7} + \li \l{What's New in Qt 5.6} + \li \l{What's New in Qt 5.5} + \li \l{What's New in Qt 5.4} + \li \l{What's New in Qt 5.3} + \li \l{What's New in Qt 5.2} + \li \l{What's New in Qt 5.1} + \li \l{What's New in Qt 5.0} + \endlist + +*/ + +/*! + \page newclasses512.html + \title New Classes and Functions in Qt 5.12 + \brief A list of new APIs in Qt 5.12. + + This page contains a comprehensive list of all new classes and functions + introduced in Qt 5.12. Links to new APIs in previous Qt 5 releases are found + at the bottom of this page. + + \sincelist 5.12 + + \section1 Additions to Other Qt 5 Releases + + \list + \li \l{What's New in Qt 5.11} + \li \l{What's New in Qt 5.10} + \li \l{What's New in Qt 5.9} + \li \l{What's New in Qt 5.8} + \li \l{What's New in Qt 5.7} + \li \l{What's New in Qt 5.6} + \li \l{What's New in Qt 5.5} + \li \l{What's New in Qt 5.4} + \li \l{What's New in Qt 5.3} + \li \l{What's New in Qt 5.2} + \li \l{What's New in Qt 5.1} + \li \l{What's New in Qt 5.0} + \endlist +*/ + |