doc/src/snippets/qstring/main.cpp
changeset 7 f7bc934e204c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/src/snippets/qstring/main.cpp	Wed Mar 31 11:06:36 2010 +0300
@@ -0,0 +1,942 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include <QApplication>
+#include <stdio.h>
+
+class Widget : public QWidget
+{
+public:
+    Widget(QWidget *parent = 0);
+
+    void constCharPointer();
+    void constCharArray();
+    void characterReference();
+    void atFunction();
+    void stringLiteral();
+    void modify();
+    void index();
+    QString boolToString(bool b);
+    void nullVsEmpty();
+
+    void appendFunction();
+    void argFunction();
+    void chopFunction();
+    void compareFunction();
+    void compareSensitiveFunction();
+    void containsFunction();
+    void countFunction();
+    void dataFunction();
+    void endsWithFunction();
+    void fillFunction();
+    void fromRawDataFunction();
+
+    void indexOfFunction();
+    void firstIndexOfFunction();
+    void insertFunction();
+    void isNullFunction();
+    void isEmptyFunction();
+    void lastIndexOfFunction();
+    void leftFunction();
+    void leftJustifiedFunction();
+    void leftRefFunction();
+    void midFunction();
+    void midRefFunction();
+    void numberFunction();
+
+    void prependFunction();
+    void removeFunction();
+    void replaceFunction();
+    void reserveFunction();
+    void resizeFunction();
+    void rightFunction();
+    void rightJustifiedFunction();
+    void rightRefFunction();
+    void sectionFunction();
+    void setNumFunction();
+    void simplifiedFunction();
+
+    void sizeFunction();
+    void splitFunction();
+    void splitCaseSensitiveFunction();
+    void sprintfFunction();
+    void startsWithFunction();
+    void toDoubleFunction();
+    void toFloatFunction();
+    void toIntFunction();
+    void toLongFunction();
+    void toLongLongFunction();
+
+    void toLowerFunction();
+    void toShortFunction();
+    void toUIntFunction();
+    void toULongFunction();
+    void toULongLongFunction();
+    void toUShortFunction();
+    void toUpperFunction();
+    void trimmedFunction();
+    void truncateFunction();
+
+    void plusEqualOperator();
+    void arrayOperator();
+};
+
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+}
+
+void Widget::constCharPointer()
+{
+//! [0]
+    QString str = "Hello";
+//! [0]
+}
+
+void Widget::constCharArray()
+{
+//! [1]
+    static const QChar data[4] = { 0x0055, 0x006e, 0x10e3, 0x03a3 };
+    QString str(data, 4);
+//! [1]
+}
+
+void Widget::characterReference()
+{
+//! [2]
+    QString str;
+    str.resize(4);
+
+    str[0] = QChar('U');
+    str[1] = QChar('n');
+    str[2] = QChar(0x10e3);
+    str[3] = QChar(0x03a3);
+//! [2]
+}
+
+void Widget::atFunction()
+{
+//! [3]
+    QString str;
+
+    for (int i = 0; i < str.size(); ++i) {
+        if (str.at(i) >= QChar('a') && str.at(i) <= QChar('f'))
+            qDebug() << "Found character in range [a-f]";
+    }
+//! [3]
+}
+
+void Widget::stringLiteral()
+{
+//! [4]
+    QString str;
+
+    if (str == "auto" || str == "extern"
+            || str == "static" || str == "register") {
+        // ...
+    }
+//! [4]
+}
+
+void Widget::modify()
+{
+//! [5]
+    QString str = "and";
+    str.prepend("rock ");     // str == "rock and"
+    str.append(" roll");        // str == "rock and roll"
+    str.replace(5, 3, "&");   // str == "rock & roll"
+//! [5]
+}
+
+void Widget::index()
+{
+//! [6]
+    QString str = "We must be <b>bold</b>, very <b>bold</b>";
+    int j = 0;
+
+    while ((j = str.indexOf("<b>", j)) != -1) {
+        qDebug() << "Found <b> tag at index position" << j;
+        ++j;
+    }
+//! [6]
+}
+
+//! [7]
+    QString Widget::boolToString(bool b)
+    {
+        QString result;
+        if (b)
+            result = "True";
+        else
+            result = "False";
+        return result;
+    }
+//! [7]
+
+
+void Widget::nullVsEmpty()
+{
+//! [8]
+    QString().isNull();               // returns true
+    QString().isEmpty();              // returns true
+
+    QString("").isNull();             // returns false
+    QString("").isEmpty();            // returns true
+
+    QString("abc").isNull();          // returns false
+    QString("abc").isEmpty();         // returns false
+//! [8]
+}
+
+void Widget::appendFunction()
+{
+//! [9]
+    QString x = "free";
+    QString y = "dom";
+
+    x.append(y);
+    // x == "freedom"
+//! [9]
+
+//! [10]
+    x.insert(x.size(), y);
+//! [10]
+}
+
+void Widget::argFunction()
+{
+//! [11]
+    QString i;           // current file's number
+    QString total;       // number of files to process
+    QString fileName;    // current file's name
+
+    QString status = QString("Processing file %1 of %2: %3")
+                    .arg(i).arg(total).arg(fileName);
+//! [11]
+
+//! [12] //! [13]
+    QString str;
+//! [12]
+    str = "%1 %2";
+
+    str.arg("%1f", "Hello");        // returns "%1f Hello"
+    str.arg("%1f").arg("Hello");    // returns "Hellof %2"
+//! [13]
+
+//! [14]
+    str = QString("Decimal 63 is %1 in hexadecimal")
+            .arg(63, 0, 16);
+    // str == "Decimal 63 is 3f in hexadecimal"
+
+    QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedStates));
+    str = QString("%1 %L2 %L3")
+            .arg(12345)
+            .arg(12345)
+            .arg(12345, 0, 16);
+    // str == "12345 12,345 3039"
+//! [14]
+}
+
+void Widget::chopFunction()
+{
+//! [15]
+    QString str("LOGOUT\r\n");
+    str.chop(2);
+    // str == "LOGOUT"
+//! [15]
+}
+
+void Widget::compareFunction()
+{
+    int x = QString::compare("auto", "auto");   // x == 0
+    int y = QString::compare("auto", "car");    // y < 0
+    int z = QString::compare("car", "auto");    // z > 0
+}
+
+void Widget::compareSensitiveFunction()
+{
+//! [16]
+    int x = QString::compare("aUtO", "AuTo", Qt::CaseInsensitive);  // x == 0
+    int y = QString::compare("auto", "Car", Qt::CaseSensitive);     // y > 0
+    int z = QString::compare("auto", "Car", Qt::CaseInsensitive);   // z < 0
+//! [16]
+}
+
+void Widget::containsFunction()
+{
+//! [17]
+    QString str = "Peter Pan";
+    str.contains("peter", Qt::CaseInsensitive);    // returns true
+//! [17]
+}
+
+void Widget::countFunction()
+{
+//! [18]
+    QString str = "banana and panama";
+    str.count(QRegExp("a[nm]a"));    // returns 4
+//! [18]
+}
+
+void Widget::dataFunction()
+{
+//! [19]
+    QString str = "Hello world";
+    QChar *data = str.data();
+    while (!data->isNull()) {
+        qDebug() << data->unicode();
+        ++data;
+    }
+//! [19]
+}
+
+void Widget::endsWithFunction()
+{
+//! [20]
+    QString str = "Bananas";
+    str.endsWith("anas");         // returns true
+    str.endsWith("pple");         // returns false
+//! [20]
+}
+
+void Widget::fillFunction()
+{
+//! [21]
+    QString str = "Berlin";
+    str.fill('z');
+    // str == "zzzzzz"
+
+    str.fill('A', 2);
+    // str == "AA"
+//! [21]
+}
+
+void Widget::fromRawDataFunction()
+{
+//! [22]
+     QRegExp pattern;
+     static const QChar unicode[] = {
+             0x005A, 0x007F, 0x00A4, 0x0060,
+             0x1009, 0x0020, 0x0020};
+     int size = sizeof(unicode) / sizeof(QChar);
+
+     QString str = QString::fromRawData(unicode, size);
+     if (str.contains(QRegExp(pattern))) {
+         // ...
+//! [22] //! [23]
+     }
+//! [23]
+}
+
+void Widget::indexOfFunction()
+{
+//! [24]
+    QString x = "sticky question";
+    QString y = "sti";
+    x.indexOf(y);               // returns 0
+    x.indexOf(y, 1);            // returns 10
+    x.indexOf(y, 10);           // returns 10
+    x.indexOf(y, 11);           // returns -1
+//! [24]
+}
+
+void Widget::firstIndexOfFunction()
+{
+//! [25]
+    QString str = "the minimum";
+    str.indexOf(QRegExp("m[aeiou]"), 0);       // returns 4
+//! [25]
+}
+
+void Widget::insertFunction()
+{
+//! [26]
+    QString str = "Meal";
+    str.insert(1, QString("ontr"));
+    // str == "Montreal"
+//! [26]
+}
+
+void Widget::isEmptyFunction()
+{
+//! [27]
+    QString().isEmpty();            // returns true
+    QString("").isEmpty();          // returns true
+    QString("x").isEmpty();         // returns false
+    QString("abc").isEmpty();       // returns false
+//! [27]
+}
+
+void Widget::isNullFunction()
+{
+//! [28]
+    QString().isNull();             // returns true
+    QString("").isNull();           // returns false
+    QString("abc").isNull();        // returns false
+//! [28]
+}
+
+void Widget::lastIndexOfFunction()
+{
+//! [29]
+    QString x = "crazy azimuths";
+    QString y = "az";
+    x.lastIndexOf(y);           // returns 6
+    x.lastIndexOf(y, 6);        // returns 6
+    x.lastIndexOf(y, 5);        // returns 2
+    x.lastIndexOf(y, 1);        // returns -1
+//! [29]
+
+//! [30]
+    QString str = "the minimum";
+    str.lastIndexOf(QRegExp("m[aeiou]"));      // returns 8
+//! [30]
+}
+
+void Widget::leftFunction()
+{
+//! [31]
+    QString x = "Pineapple";
+    QString y = x.left(4);      // y == "Pine"
+//! [31]
+}
+
+void Widget::leftJustifiedFunction()
+{
+//! [32]
+    QString s = "apple";
+    QString t = s.leftJustified(8, '.');    // t == "apple..."
+//! [32]
+
+//! [33]
+    QString str = "Pineapple";
+    str = str.leftJustified(5, '.', true);    // str == "Pinea"
+//! [33]
+}
+
+void Widget::midFunction()
+{
+//! [34]
+    QString x = "Nine pineapples";
+    QString y = x.mid(5, 4);            // y == "pine"
+    QString z = x.mid(5);               // z == "pineapples"
+//! [34]
+}
+
+void Widget::numberFunction()
+{
+//! [35]
+    long a = 63;
+    QString s = QString::number(a, 16);             // s == "3f"
+    QString t = QString::number(a, 16).toUpper();     // t == "3F"
+//! [35]
+}
+
+void Widget::prependFunction()
+{
+//! [36]
+    QString x = "ship";
+    QString y = "air";
+    x.prepend(y);
+    // x == "airship"
+//! [36]
+}
+
+void Widget::removeFunction()
+{
+//! [37]
+    QString s = "Montreal";
+    s.remove(1, 4);
+    // s == "Meal"
+//! [37]
+
+//! [38]
+    QString t = "Ali Baba";
+    t.remove(QChar('a'), Qt::CaseInsensitive);
+    // t == "li Bb"
+//! [38]
+
+//! [39]
+    QString r = "Telephone";
+    r.remove(QRegExp("[aeiou]."));
+    // r == "The"
+//! [39]
+}
+
+void Widget::replaceFunction()
+{
+//! [40]
+    QString x = "Say yes!";
+    QString y = "no";
+    x.replace(4, 3, y);
+    // x == "Say no!"
+//! [40]
+
+//! [41]
+    QString str = "colour behaviour flavour neighbour";
+    str.replace(QString("ou"), QString("o"));
+    // str == "color behavior flavor neighbor"
+//! [41]
+
+//! [42]
+    QString s = "Banana";
+    s.replace(QRegExp("a[mn]"), "ox");
+    // s == "Boxoxa"
+//! [42]
+
+//! [43]
+    QString t = "A <i>bon mot</i>.";
+    t.replace(QRegExp("<i>([^<]*)</i>"), "\\emph{\\1}");
+    // t == "A \\emph{bon mot}."
+//! [43]
+
+//! [86]
+    QString equis = "xxxxxx";
+    equis.replace("xx", "x");
+    // equis == "xxx"    
+//! [86]
+}
+
+void Widget::reserveFunction()
+{
+//! [44]
+    QString result;
+    int maxSize;
+    bool condition;
+    QChar nextChar;
+
+    result.reserve(maxSize);
+
+    while (condition)
+        result.append(nextChar);
+
+    result.squeeze();
+//! [44]
+}
+
+void Widget::resizeFunction()
+{
+//! [45]
+    QString s = "Hello world";
+    s.resize(5);
+    // s == "Hello"
+
+    s.resize(8);
+    // s == "Hello???" (where ? stands for any character)
+//! [45]
+
+//! [46]
+    QString t = "Hello";
+    t += QString(10, 'X');
+    // t == "HelloXXXXXXXXXX"
+//! [46]
+
+//! [47]
+    QString r = "Hello";
+    r = r.leftJustified(10, ' ');
+    // r == "Hello     "
+//! [47]
+}
+
+void Widget::rightFunction()
+{
+//! [48]
+    QString x = "Pineapple";
+    QString y = x.right(5);      // y == "apple"
+//! [48]
+}
+
+void Widget::rightJustifiedFunction()
+{
+//! [49]
+    QString s = "apple";
+    QString t = s.rightJustified(8, '.');    // t == "...apple"
+//! [49]
+
+//! [50]
+    QString str = "Pineapple";
+    str = str.rightJustified(5, '.', true);    // str == "Pinea"
+//! [50]
+}
+
+void Widget::sectionFunction()
+{
+//! [51] //! [52]
+    QString str;
+//! [51]
+    QString csv = "forename,middlename,surname,phone";
+    QString path = "/usr/local/bin/myapp"; // First field is empty
+    QString::SectionFlag flag = QString::SectionSkipEmpty;
+
+
+    str = csv.section(',', 2, 2);   // str == "surname"
+    str = path.section('/', 3, 4);  // str == "bin/myapp"
+    str = path.section('/', 3, 3, flag); // str == "myapp"
+//! [52]
+
+//! [53]
+    str = csv.section(',', -3, -2);  // str == "middlename,surname"
+    str = path.section('/', -1); // str == "myapp"
+//! [53]
+
+//! [54]
+    QString data = "forename**middlename**surname**phone";
+
+    str = data.section("**", 2, 2); // str == "surname"
+    str = data.section("**", -3, -2); // str == "middlename**surname"
+//! [54]
+
+//! [55]
+    QString line = "forename\tmiddlename  surname \t \t phone";
+    QRegExp sep("\\s+");
+    str = line.section(sep, 2, 2); // s == "surname"
+    str = line.section(sep, -3, -2); // s == "middlename  surname"
+//! [55]
+}
+
+void Widget::setNumFunction()
+{
+//! [56]
+    QString str;
+    str.setNum(1234);       // str == "1234"
+//! [56]
+}
+
+void Widget::simplifiedFunction()
+{
+//! [57]
+    QString str = "  lots\t of\nwhitespace\r\n ";
+    str = str.simplified();
+    // str == "lots of whitespace";
+//! [57]
+}
+
+void Widget::sizeFunction()
+{
+//! [58]
+    QString str = "World";
+    int n = str.size();         // n == 5
+    str.data()[0];              // returns 'W'
+    str.data()[4];              // returns 'd'
+    str.data()[5];              // returns '\0'
+//! [58]
+}
+
+void Widget::splitFunction()
+{
+//! [59]
+    QString str;
+    QStringList list;
+
+    str = "Some  text\n\twith  strange whitespace.";
+    list = str.split(QRegExp("\\s+"));
+    // list: [ "Some", "text", "with", "strange", "whitespace." ]
+//! [59]
+
+//! [60]
+    str = "This time, a normal English sentence.";
+    list = str.split(QRegExp("\\W+"), QString::SkipEmptyParts);
+    // list: [ "This", "time", "a", "normal", "English", "sentence" ]
+//! [60]
+
+//! [61]
+    str = "Now: this sentence fragment.";
+    list = str.split(QRegExp("\\b"));
+    // list: [ "", "Now", ": ", "this", " ", "sentence", " ", "fragment", "." ]
+//! [61]
+}
+
+void Widget::splitCaseSensitiveFunction()
+{
+//! [62]
+    QString str = "a,,b,c";
+
+    QStringList list1 = str.split(",");
+    // list1: [ "a", "", "b", "c" ]
+
+    QStringList list2 = str.split(",", QString::SkipEmptyParts);
+    // list2: [ "a", "b", "c" ]
+//! [62]
+}
+
+void Widget::sprintfFunction()
+{
+//! [63]
+    size_t BufSize;
+    char buf[BufSize];
+
+    ::snprintf(buf, BufSize, "%lld", 123456789LL);
+    QString str = QString::fromAscii(buf);
+//! [63]
+
+//! [64]
+    QString result;
+    QTextStream(&result) << "pi = " << 3.14;
+    // result == "pi = 3.14"
+//! [64]
+}
+
+void Widget::startsWithFunction()
+{
+//! [65]
+    QString str = "Bananas";
+    str.startsWith("Ban");     // returns true
+    str.startsWith("Car");     // returns false
+//! [65]
+}
+
+void Widget::toDoubleFunction()
+{
+//! [66]
+    QString str = "1234.56";
+    double val = str.toDouble();   // val == 1234.56
+//! [66]
+
+//! [67]
+    bool ok;
+    double d;
+
+    d = QString( "1234.56e-02" ).toDouble(&ok); // ok == true, d == 12.3456
+//! [67]
+
+//! [68] //! [69]
+    QLocale::setDefault(QLocale::C);
+    d = QString( "1234,56" ).toDouble(&ok); // ok == false
+//! [68]
+    d = QString( "1234.56" ).toDouble(&ok); // ok == true, d == 1234.56
+
+//! [69] //! [70]
+    QLocale::setDefault(QLocale::German);
+    d = QString( "1234,56" ).toDouble(&ok); // ok == true, d == 1234.56
+    d = QString( "1234.56" ).toDouble(&ok); // ok == true, d == 1234.56
+
+//! [70]
+    QLocale::setDefault(QLocale::C);
+    d = QString( "1,234,567.89" ).toDouble(&ok); // ok == false
+}
+
+void Widget::toFloatFunction()
+{
+//! [71]
+    QString str1 = "1234.56";
+    str1.toFloat();             // returns 1234.56
+
+    bool ok;
+    QString str2 = "R2D2";
+    str2.toFloat(&ok);          // returns 0.0, sets ok to false
+//! [71]
+}
+
+void Widget::toIntFunction()
+{
+//! [72]
+    QString str = "FF";
+    bool ok;
+    int hex = str.toInt(&ok, 16);       // hex == 255, ok == true
+    int dec = str.toInt(&ok, 10);       // dec == 0, ok == false
+//! [72]
+}
+
+void Widget::toLongFunction()
+{
+//! [73]
+    QString str = "FF";
+    bool ok;
+
+    long hex = str.toLong(&ok, 16);     // hex == 255, ok == true
+    long dec = str.toLong(&ok, 10);     // dec == 0, ok == false
+//! [73]
+}
+
+void Widget::toLongLongFunction()
+{
+//! [74]
+    QString str = "FF";
+    bool ok;
+
+    qint64 hex = str.toLongLong(&ok, 16);      // hex == 255, ok == true
+    qint64 dec = str.toLongLong(&ok, 10);      // dec == 0, ok == false
+//! [74]
+}
+
+void Widget::toLowerFunction()
+{
+//! [75]
+    QString str = "Qt by NOKIA";
+    str = str.toLower();        // str == "qt by nokia"
+//! [75]
+}
+
+void Widget::toShortFunction()
+{
+//! [76]
+    QString str = "FF";
+    bool ok;
+
+    short hex = str.toShort(&ok, 16);   // hex == 255, ok == true
+    short dec = str.toShort(&ok, 10);   // dec == 0, ok == false
+//! [76]
+}
+
+void Widget::toUIntFunction()
+{
+//! [77]
+    QString str = "FF";
+    bool ok;
+
+    uint hex = str.toUInt(&ok, 16);     // hex == 255, ok == true
+    uint dec = str.toUInt(&ok, 10);     // dec == 0, ok == false
+//! [77]
+}
+
+void Widget::toULongFunction()
+{
+//! [78]
+    QString str = "FF";
+    bool ok;
+
+    ulong hex = str.toULong(&ok, 16);   // hex == 255, ok == true
+    ulong dec = str.toULong(&ok, 10);   // dec == 0, ok == false
+//! [78]
+}
+
+void Widget::toULongLongFunction()
+{
+//! [79]
+    QString str = "FF";
+    bool ok;
+
+    quint64 hex = str.toULongLong(&ok, 16);    // hex == 255, ok == true
+    quint64 dec = str.toULongLong(&ok, 10);    // dec == 0, ok == false
+//! [79]
+}
+
+void Widget::toUShortFunction()
+{
+//! [80]
+    QString str = "FF";
+    bool ok;
+
+    ushort hex = str.toUShort(&ok, 16);     // hex == 255, ok == true
+    ushort dec = str.toUShort(&ok, 10);     // dec == 0, ok == false
+//! [80]
+}
+
+void Widget::toUpperFunction()
+{
+//! [81]
+    QString str = "TeXt";
+    str = str.toUpper();        // str == "TEXT"
+//! [81]
+}
+
+void Widget::trimmedFunction()
+{
+//! [82]
+    QString str = "  lots\t of\nwhitespace\r\n ";
+    str = str.trimmed();
+    // str == "lots\t of\nwhitespace"
+//! [82]
+}
+
+void Widget::truncateFunction()
+{
+//! [83]
+    QString str = "Vladivostok";
+    str.truncate(4);
+    // str == "Vlad"
+//! [83]
+}
+
+void Widget::plusEqualOperator()
+{
+//! [84]
+    QString x = "free";
+    QString y = "dom";
+    x += y;
+    // x == "freedom"
+//! [84]
+}
+
+void Widget::arrayOperator()
+{
+//! [85]
+    QString str;
+
+    if (str[0] == QChar('?'))
+        str[0] = QChar('_');
+//! [85]
+}
+
+void Widget::midRefFunction()
+{
+//! [midRef]
+    QString x = "Nine pineapples";
+    QStringRef y = x.midRef(5, 4);      // y == "pine"
+    QStringRef z = x.midRef(5);         // z == "pineapples"
+//! [midRef]
+}
+
+void Widget::leftRefFunction()
+{
+//! [leftRef]
+    QString x = "Pineapple";
+    QStringRef y = x.leftRef(4);        // y == "Pine"
+//! [leftRef]
+}
+
+void Widget::rightRefFunction()
+{
+//! [rightRef]
+    QString x = "Pineapple";
+    QStringRef y = x.rightRef(5);       // y == "apple"
+//! [rightRef]
+}
+
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+    Widget widget;
+    widget.show();
+    return app.exec();
+}