Merge remote-tracking branch 'origin/master'
[qt:qt.git] / doc / src / getting-started / how-to-learn-qt.qdoc
1 /****************************************************************************\r
2 **\r
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).\r
4 ** All rights reserved.\r
5 ** Contact: Nokia Corporation (\r
6 **\r
7 ** This file is part of the documentation of the Qt Toolkit.\r
8 **\r
10 ** No Commercial Usage\r
11 ** This file contains pre-release code and may not be distributed.\r
12 ** You may use this file in accordance with the terms and conditions\r
13 ** contained in the Technology Preview License Agreement accompanying\r
14 ** this package.\r
15 **\r
16 ** GNU Free Documentation License\r
17 ** Alternatively, this file may be used under the terms of the GNU Free\r
18 ** Documentation License version 1.3 as published by the Free Software\r
19 ** Foundation and appearing in the file included in the packaging of this\r
20 ** file.\r
21 **\r
22 ** If you have questions regarding the use of this file, please contact\r
23 ** Nokia at\r
24 ** $QT_END_LICENSE$\r
25 **\r
26 ****************************************************************************/\r
27 \r
28 /*!\r
29     \page how-to-learn-qt.html\r
30     \title How to Learn Qt\r
31     \brief Links to guides and resources for learning Qt.\r
32     \nextpage Tutorials\r
33 \r
34     \section1 Required programming skills\r
35 \r
36     Qt is an application development framework based on C++. Traditionally, C++ is the major programming language used to develop with Qt.\r
37     \r
38     Since the introduction of Qt Quick (Qt UI Creation Kit) in the beginning of 2011, Qt has been supporting script-based declarative programming with QML. QML is very easy to understand for anybody who is familiar with JavaScript as well as for all other developers who are familiar the basics of object oriented programming and have worked with other scripting languages. Designers who are familiar with web development can start with QML and implement their ideas in executable code which can later be powered by more application logic developed by engineering teams. \r
39         \r
40     A solid understanding of the basics of C++ is essential for those planning on using Qt for C++. You do not need to be a C++ expert to begin. Qt simplifies many aspects of C++ development, making it a lot of fun. The overall development effort is minimal since Qt API are easy to understand and application functionality can be implemented with a smaller a mount of code. C++ experts will find a lot of powerful APIs and tools in Qt which will make complicated things simple and new features easy to get done.\r
41           \r
42     Various bindings have been developed by the Qt community for other programming languages. See the \l{Qt Language Bindings on Wiki}{this wiki page on Qt Developer Network} for more information about using other programming languages with Qt.\r
43 \r
44     \section1 Tools to install\r
45     \r
46     Qt provides a range of tools for all steps in application development for desktops and devices. Tools are integrated into packages that are easily installed on several platforms. You have following options:\r
47     \r
48     \list\r
49     \o  \l{Qt SDK Product Page}{Qt SDK} - one package with all the tools you need for the creation of applications for Symbian and Maemo in addition to desktop platforms such as Microsoft Windows, Mac OS X, and Linux.\r
50     \o  \l{Qt Creator Product Page}{Qt Creator} - a cross-platform integrated development environment (IDE). Note, that the Qt Creator package does not contain the Qt framework itself. You can either configure it to use with a version of Qt already installed on your machine or download a new version of Qt separately.\r
51     \o  \l{Product Overview}{Qt} binary package - a ready-to-go installer for Mac, Linux and Windows containing a precompiled tool chain, libraries, include files, documentation, demos and examples.\r
52     \o  \l{Product Overview}{Qt} source code packages - Qt and Qt creator are available in source code as zip or tar archives as well as on the \l{Public Qt Repository}. \r
53     \endlist\r
54     \r
55     All packages above are available for download on the \l{Downloads} page. We recommend starting with Qt SDK since it contains all you need in one package. Later on you can consider installing other packages separately. They can all coexist on your machine and be configured to work with each other.\r
56       \r
57     \section1 Examples in action\r
58     \r
59     One of the most popular ways of discovering new technologies is to walk through examples.\r
60     \r
61     Qt provides a large selection of examples and demos which are available in source code (check \c demos and \c examples directories in your installation).The main difference between examples and demos is that examples are smaller and more focused on one functionality whereas demos are complete, more complex applications using many Qt features.\r
62     \r
63     Most of the examples and demos are precompiled and integrated into the \l{Examples and Demos Launcher}.\r
64     \r
65     \div {class="float-left"}\r
66     \inlineimage qtdemo-small.png\r
67     \enddiv\r
68     \r
69     Run it and see Qt's features in action. You can also start all examples and demos from it as separate applications or browse to the source code. \l{Qt Creator Product Page}{Qt Creator} allows loading of examples as projects with a wizard on the "Welcome" page.\r
70 \r
71     Additionally, \l{Qt Widget Gallery} provides overviews of selected Qt desktop widgets in each of the styles used on various supported platforms.\r
72     \clearfloat\r
73     \r
74     If you are new to Qt, you should first take a look on the following examples:\r
75     \r
76     \list\r
77     \o  \l{Calculator Example}\r
78     \o  \l{Application Example}\r
79     \o  \l{Image Viewer Example}\r
80     \o  \l{Basic Drawing Example}\r
81     \endlist\r
82     \r
83     \section1 Qt technology guides\r
84     \r
85     At some point you should take some time to walk through the Qt technology guides and overviews provided in Qt documentation. Qt is simple to use, but you should have a basic understanding of the key concepts behind Qt to reveal its full power. There is a large selection of documents that are sorted into the following sections:\r
86     \r
87     \list\r
88     \o  \l{Programming with Qt} - about key components and technologies used in Qt development\r
89     \o  \l{Cross-platform and Platform-specific Development} and \l{Platform-Specific Documentation} - using Qt on different platforms\r
90     \o  \l{Qt Quick} - a home page of Qt Quick in Qt documentation\r
91     \o  \l{UI Design with Qt} - specifics of desktop UI development\r
92     \o  \l{Qt and Key Technologies} - how Qt addresses industry standards and also how they are used in Qt\r
93     \o  \l{Best Practice Guides} - a collection of various tips and hints\r
94     \endlist\r
95 \r
96     The following guides are essential for those new to Qt:\r
97     \r
98     \list\r
99     \o  \l{Object Model}\r
100     \o  \l{Object Trees & Ownership}\r
101     \o  \l{Signals & Slots}\r
102     \o  \l{The Event System}\r
103     \o  \l{Implicit Sharing}\r
104     \o  \l{Container Classes}\r
105     \o  \l{Internationalization with Qt}\r
106     \o  \l{Coordinate System}\r
107     \o  \l{Paint System}\r
108     \o  \l{Network Programming}\r
109     \o  \l{The Qt Resource System}\r
110     \endlist\r
111     \r
112     The \l{Develop with Qt} guide provides a good overview of all topics in Qt development and includes links to the section mentioned above as well as many more advanced aspects.\r
113     \r
114     \section1 Tutorials\r
115     \r
116     Compared to examples, tutorials walk you through the development steps of an application and show how to use Qt to implement required functionality. Some Qt tutorials also explain specific details of selected Qt features.\r
117     \r
118     The \l{Getting Started Programming with Qt} tutorial is a good start for all who are new to Qt. In this tutorial you will develop a simple text editor and go through the major steps of developing of a Qt application.\r
119     \r
120     Desktop developers should then proceed to the \l{Widgets Tutorial} as well as the \l{Address Book Tutorial}.\r
121     \r
122     Many Qt developers use Qt Designer to compose desktop UIs in a visual editor. Take a look the \l{Qt Designer manual} to learn more about this.\r
123 \r
124     The \l{Tutorials} page contains a list of all tutorials provided in Qt documentation.\r
125     \r
126     \section1 Getting most of Qt documentation\r
127     \r
128     Qt comes with extensive documentation, with hypertext\r
129     cross-references throughout so you can easily click your way to\r
130     whatever interests you. The part of the documentation that you'll\r
131     probably use the most is the \link index.html API\r
132     Reference\endlink. Each link provides a different way of\r
133     navigating the API Reference. Try them all to see which work best\r
134     for you.\r
135       \r
136     The \l{All Overviews and HOWTOs} page lists all Qt technology overviews and HOWTOs in one please. This includes the overviews mentioned above, but also lists several addtional references (e.g. starting pages of all Qt modules, most of which contain a short introduction to a given module).\r
137     \r
138     You can find Qt documentation either directly integrated into Qt tools as well as \l{Qt Docs Web Start Page}{here}. The advantage of Qt documentation provided in tools is that it is stored on your machine and is available offline. The Qt documentation web site provides access to documentation from different Qt versions as well as the latest snapshot. Qt tools provide search functionality over the index of content as well as free text search. Advanced searches can also be conducted in Qt documentation through the use of search engines. Just limit the search to \c and review help topics provided by the search engine you're using to know how to write more advanced search queries.\r
139     \r
140     The most of the content in Qt documentation is in the documentation of Qt APIs. This includes a lot of code snippets showing how to implement a functionality with Qt APIs. A good example of this is the documentation on the \l{QString} class.\r
141     \r
142     Make sure to take a look at the following reference documentation since they contain a lot of important details:\r
143     \list\r
144     \o  \l{Qt Namespace} - contains a log of frequently used static variables\r
145     \o  \l{Global Qt Declarations} - to get an overview of available standard types, macros, and static functions\r
146     \endlist\r
147     \r
148     \section1 Get advice and support from the Qt Community\r
149     \r
150     Qt has an active and helpful user community who communicate using\r
151     the various means:\r
152     \r
153     \list\r
154     \o  \l{Qt Mailing Lists}{qt-interest} Mailing list\r
155     \o  \l{Qt Centre} Website\r
156     \o  \l{Forums on Qt Developer Network}\r
157     \o  \l{Wiki on Qt Developer Network} written by the Qt community and hosted on the Qt Developer Network\r
158     \o  The \c #qt and \c #qt-creator IRC channels on \c\r
159     \endlist\r
160     \r
161     In addition, many Qt developers are active members of the \l{KDE}{KDE community}.\r
162     \r
163     \section1 Books about Qt\r
164     \r
165     There is a growing number of books about Qt programming. The Qt team maintains a list of books on the Qt Developer Network site. See \l{Books about Qt Programming} for a complete list of Qt books including translations to various languages.    \r
166 \r
167     \section1 Training\r
168     \r
169     In many cases people prefer attending professional training courses to boost their learning progress. A training course has two unique benefits: Its scope can be adapted to your needs and you will get helped on the spot by Qt trainers who are also experienced Qt developers. \l{Qt Training Partners} offer a wide range of courses. Most courses are based on materials developed by the Qt team.\r
170     \r
171     There are two types of courses: open enrollment and on-site. \l{Open Enrollment Qt Training Courses}{Open enrollment courses} are public courses open to anybody. They are a good choice for an individual developers or small groups. If you have a large Qt project, on-site training is a better choice and can be more cost efficient. You can request your own agenda for on-site training whereas open enrollment courses have a predefined agenda and scope valid for all attendees. \r
172 \r
173     \section1 Listen to Qt experts on videos\r
174     \r
175     A wide range of videos is available on the \l{Qt Video Portal} on the Qt Developer Network. Most of the videos are recordings of talks given by Qt experts at Qt Developer Days. You can use categories and tags to find videos which cover the scope of your needs.\r
176     \r
177     Another part of the videos are recordings of training sessions recorded at Qt Developer Days:\r
178     \list\r
179     \o  Qt Essentials, by ICS: (part \l{Qt Essentials by ICS part 1}{1} and \l{Qt Essentials by ICS part 1}{2}) and KDAB: (part \l{Qt Essentials by KDAB part 1}{1} and \l{Qt Essentials by KDAB part 2}{2})\r
180     \o  \c QGraphicsView, \l{QGraphicsView by ICS}{session by ICS} and \l{QGraphicsView by ICS}{session by KDAB}\r
181     \o  Multithreading, \l{Multithreading by ICS}{session by ICS} and \l{Multithreading by KDAB}{session by KDAB}\r
182     \o  UI Development with Qt, \l{UI Development with Qt by ICS}{session by ICS} and \l{UI Development with Qt by KDAB}{session by KDAB}\r
183     \o  Embedded Development, \l{Embedded Development by basysKom}{session by basysKom} and \l{Embedded Development by ICS}{session by ICS}\r
184     \o  Model/View Programming, \l{ModelView Programming by basysKom}{session by basysKom} and \l{ModelView Programming by KDAB}{session by KDAB}\r
185     \o  \c QWebKit, \l{QWebKit by KDAB}{by KDAB}\r
186     \o  Qt Quick, by KDAB: part \l{Quick by KDAB part 1}{1}, \l{Quick by KDAB part 2}{2}, \l{Quick by KDAB part 3}{3}, \l{Quick by KDAB part 4}{4}\r
187     \o  Qt Mobile Development for Nokia Devices, by Digia: part \l{Qt Mobile Development for Nokia Devices by Digia part 1}{1}, \l{Qt Mobile Development for Nokia Devices by Digia part 2}{2}, \l{Qt Mobile Development for Nokia Devices by Digia part 3}{3}\r
188     \endlist\r
189     \r
190     Additionally, there are recordings of the Qt Essentials training modules:\r
191     \list\r
192     \o  Fundamentals of Qt, part \l{Qt Essentials - Fundamentals of Qt part 1}{1} and \l{Qt Essentials - Fundamentals of Qt part 2}{2} \r
193     \o  Application Creation, part \l{Qt Essentials - Application Creation part 1}{1}, \l{Qt Essentials - Application Creation part 2}{2}, \l{Qt Essentials - Application Creation part 3}{3}\r
194     \o  Widgets, part \l{Qt Essentials - Widgets part 1}{1}, \l{Qt Essentials - Widgets part 2}{2}, \l{Qt Essentials - Widgets part 3}{3}\r
195     \o  Graphics View, part \l{Qt Essentials - Graphics View part 1}{1}, \l{Qt Essentials - Graphics View part 2}{2}, \l{Qt Essentials - Graphics View part 3}{3}\r
196     \o  Model/View I, part \l{Qt Essentials - Model/View I part 1}{1}, \l{Qt Essentials - Model/View I part 2}{2}, \l{Qt Essentials - Model/View I part 3}{3}, \l{Qt Essentials - Model/View I part 4}{4}\r
197     \o  Model/View II, , part \l{Qt Essentials - Model/View II part 1}{1}, \l{Qt Essentials - Model/View II part 2}{2}, \l{Qt Essentials - Model/View II part 3}{3}, \l{Qt Essentials - Model/View II part 4}{4}, \l{Qt Essentials - Model/View II part 5}{5}\r
198     \endlist\r
199     \r
200     \section1 Prove your knowledge\r
201     \r
202     \l{Qt Certification} publishes scopes of the exams in form of Qt Curriculum blocks. They are available under \l{Qt Certification Exam Preparation and Prerequisites}{this link}. The Qt Essentials Curriculum block describes a scope of knowledge which covers all fundamental concepts and basic features in Qt. Check this list to find out which areas of Qt you should become familiar with in order to reach a solid Qt developer level. If you also have at least 6 month regular Qt development experience you can consider passing the exam to prove your knowledge.\r
203 \r
204     \section1 Further Readings and Materials\r
205     \r
206    \r
207     Another valuable source of example code and explanations of Qt\r
208     features is the archive of articles from \l{Qt Quarterly}, a quarterly newsletter for users of Qt.\r
209 \r
210     Good luck and have fun!\r
211 */\r