QT Essentials - Application Creation Module
QT Essentials - Application Creation Module
QT Essentials - Application Creation Module
http://qt.nokia.com
1/35
Application Creation
2/35
Module Objectives
We will create an application to show fundamental concepts
Main Window: How a typical main window is structured Settings: Store/Restore application settings Resources: Adding icons and other les to your application Translation: Short overview of internationalization Deployment: Distributing your application
Application Creation
3/35
Application Creation
Main Windows
4/35
Application Creation
Main Windows
5/35
Main Window
QMainWindow: main application window Has own layout
Central Widget
QMainWindow::setCentralWidget( widget ) Just any widget object
Application Creation
Main Windows
6/35
Application Creation
Main Windows
7/35
QAction capabilities
setEnabled(bool) Enables disables actions In menu and toolbars, etc... setCheckable(bool) Switches checkable state (on/off) setChecked(bool) toggles checked state setData(QVariant) Stores data with the action
See QAction Documentation
Application Creation
Main Windows
8/35
Application Creation
Main Windows
9/35
QToolButton
Quick-access button to commands or options Used when adding action to QToolBar Can be used instead QPushButton Different visual appearance! Advantage: allows to attach action
QToolButton* button = new QToolButton(this); button->setDefaultAction(action); // Can have a menu button->setMenu(menu); // Shows menu indicator on button button->setPopupMode(QToolButton::MenuButtonPopup); // Control over text + icon placements button->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
Application Creation
Main Windows
11/35
Application Creation
Main Windows
12/35
Application Creation
Main Windows
13/35
or signal customContextMenuRequested() Connect to signal to show context menu Or via QWidget::actions() list
QWidget::addAction(action) setContextMenuPolicy(Qt::ActionsContextMenu) Displays QWidget::actions() as context menu
Application Creation
Main Windows
14/35
Typical APIs
QWidget setWindowModied(...) setWindowTitle(...) addAction(...) contextMenuEvent(...) QMainWindow setCentralWidget(...) menuBar() statusBar() addToolbar(...) addToolBarBreak() addDockWidget(...) setCorner(...) setDockOptions(...) QAction setShortcuts(...) setStatusTip(...) signal triggered() QMenuBar addMenu(...) QToolbar addAction(...) QStatusBar showMessage(...) clearMessage() addWidget(...)
Application Creation
Main Windows
15/35
Application Creation
Main Windows
16/35
Application Creation
Settings
17/35
Typical usage
QSettings settings; settings.setValue("group/value", 68); int value = settings.value("group/value").toInt();
Values are stored as QVariant Keys form hierarchies using / or use beginGroup(prefix) / endGroup() value() excepts default value
settings.value("group/value", 68).toInt()
If value not found and default not specied Invalid QVariant() returned
Application Creation
Settings
18/35
Application Creation
Settings
19/35
System-wide location
1 for application 2 for applications by organization
Application Creation
Settings
20/35
Application Creation
Resources
21/35
Resource System
Platform-independent mechanism for storing binary les Not limited to images Resource les stored in applications executable Useful if application requires les E.g. icons, translation les, sounds Dont risk of losing les, easier deployment
Application Creation
Resources
22/35
Using Resources
Resources specied in .qrc le
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file>images/copy.png</file> <file>images/cut.png</file> ... </qresource> </RCC>
Can be created using QtCreator Resources are accessible with : prex Example: ":/images/cut.png" Simply use resource path instead of le name QIcon(":/images/cut.png")
Application Creation
Resources
23/35
Resource Specics
Path Prex
<qresource prefix="/myresources"> File accessible via ":/myresources/..."
Aliases
<file alias="cut">images/cut.png</file> File accessible via ":/cut"
Loading resources at runtime Use rcc to create binary and register resource
rcc -binary data.qrc -o data.rcc QResource::registerResource("data.rcc")
Application Creation
Resources
24/35
Application Creation
Resources
25/35
Application Creation
26/35
Internationalization (i18n)
This is by no means a complete guide! Internationalization (i18n) Designing applications to be adaptable to languages and regions without engineering changes. Localization (l10n) Adapting applications for region by adding components and translations Qt supports the whole process: QString supports unicode On-screen texts (QObject::tr()) Number and date formats (QLocale) Icons loading (Resource System) Translation tool (Qt Linguist) LTR and RTL text, layout and widgets (e.g. arabic) Plural handling (1 le vs 2 les)
See Internationalization with Qt Documentation
Application Creation
27/35
Text Translation
lupdate - scan C++ and .ui les for strings. Create/update .ts
le
linguist - edit .ts le for adding translations lrelease - read .ts and creates .qm le for release. QObject::tr() - mark translatable strings in C++ code. combine with QString::arg() for dynamic text
void MyWidget::someFunction(QString name, QDate d) { //: This comment is seen by translation staff label->setText(tr("Name: %1 Date: %2") .arg(name).arg(d.toString())); setWindowTitle(tr("File: %1 Line: %2 [*]").arg(f).arg(l)); // ...
Application Creation
28/35
Translation Process
extracts translations updates ts file
Code label->setText(tr("Greeting")); Tool lupdate Project File (app.pro) TRANSLATIONS += app_de.ts CODECFORTR = UTF-8 Tool Qt Linguist
compile translation
provide translation
load translation
Application Creation
29/35
Other Internationalization
Qt classes are locale aware Numbers
QLocale::setDefault(QLocale::German); // de_DE QLocale german; bool ok; german.toDouble("1234,56", &ok); // ok == true QLocale::setDefault(QLocale::C); // en_US value = QString("1234.56").toDouble(&ok) // ok == true
Translating Media (Resource System) See See Qt Resource System Documentation Use QKeySequence for Accelerator Values
menu->setShortCuts(QKeySequence::New); menu->setShortCuts(QKeySequence(tr("Ctrl+N"));
Application Creation
30/35
Application Creation
31/35
Application Creation
Deploying Qt Applications
32/35
Ways of Deploying
Static Linking Results in stand-alone executable + Only few les to deploy Executables are large No exibility You cannot deploy plugins Shared Libraries + Can deploy plugins + Qt libs shared between applications + Smaller, more exible executables More les to deploy Qt is by default compiled as shared library If Qt is pre-installed on system Use shared libraries approach See Deploying Qt Applications Documentation
Application Creation
Deploying Qt Applications
33/35
Deployment
Shared Library Version If Qt is not a system library
Need to redistribute Qt libs with application Minimal deployment Libraries used by application Plugins used by Qt Ensure Qt libraries use correct path to nd Qt plugins
See Using qt.conf Documentation
Application Creation
Deploying Qt Applications
34/35
Nokia, Qt and the Nokia and Qt logos are the registered trademarks of Nokia Corporation in Finland and other countries worldwide.
Application Creation
Legal
35/35