Re-enable QPrinterInfo test on Mac OS X.
[profile/ivi/qtbase.git] / doc / src / snippets / qstring / main.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the documentation of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:BSD$
9 ** You may use this file under the terms of the BSD license as follows:
10 **
11 ** "Redistribution and use in source and binary forms, with or without
12 ** modification, are permitted provided that the following conditions are
13 ** met:
14 **   * Redistributions of source code must retain the above copyright
15 **     notice, this list of conditions and the following disclaimer.
16 **   * Redistributions in binary form must reproduce the above copyright
17 **     notice, this list of conditions and the following disclaimer in
18 **     the documentation and/or other materials provided with the
19 **     distribution.
20 **   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
21 **     the names of its contributors may be used to endorse or promote
22 **     products derived from this software without specific prior written
23 **     permission.
24 **
25 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
36 **
37 ** $QT_END_LICENSE$
38 **
39 ****************************************************************************/
40
41 #include <QtGui>
42 #include <QApplication>
43 #include <stdio.h>
44
45 class Widget : public QWidget
46 {
47 public:
48     Widget(QWidget *parent = 0);
49
50     void constCharPointer();
51     void constCharArray();
52     void characterReference();
53     void atFunction();
54     void stringLiteral();
55     void modify();
56     void index();
57     QString boolToString(bool b);
58     void nullVsEmpty();
59
60     void appendFunction();
61     void argFunction();
62     void chopFunction();
63     void compareFunction();
64     void compareSensitiveFunction();
65     void containsFunction();
66     void countFunction();
67     void dataFunction();
68     void endsWithFunction();
69     void fillFunction();
70     void fromRawDataFunction();
71
72     void indexOfFunction();
73     void firstIndexOfFunction();
74     void insertFunction();
75     void isNullFunction();
76     void isEmptyFunction();
77     void lastIndexOfFunction();
78     void leftFunction();
79     void leftJustifiedFunction();
80     void leftRefFunction();
81     void midFunction();
82     void midRefFunction();
83     void numberFunction();
84
85     void prependFunction();
86     void removeFunction();
87     void replaceFunction();
88     void reserveFunction();
89     void resizeFunction();
90     void rightFunction();
91     void rightJustifiedFunction();
92     void rightRefFunction();
93     void sectionFunction();
94     void setNumFunction();
95     void simplifiedFunction();
96
97     void sizeFunction();
98     void splitFunction();
99     void splitCaseSensitiveFunction();
100     void sprintfFunction();
101     void startsWithFunction();
102     void toDoubleFunction();
103     void toFloatFunction();
104     void toIntFunction();
105     void toLongFunction();
106     void toLongLongFunction();
107
108     void toLowerFunction();
109     void toShortFunction();
110     void toUIntFunction();
111     void toULongFunction();
112     void toULongLongFunction();
113     void toUShortFunction();
114     void toUpperFunction();
115     void trimmedFunction();
116     void truncateFunction();
117
118     void plusEqualOperator();
119     void arrayOperator();
120 };
121
122 Widget::Widget(QWidget *parent)
123     : QWidget(parent)
124 {
125 }
126
127 void Widget::constCharPointer()
128 {
129     //! [0]
130     QString str = "Hello";
131     //! [0]
132 }
133
134 void Widget::constCharArray()
135 {
136     //! [1]
137     static const QChar data[4] = { 0x0055, 0x006e, 0x10e3, 0x03a3 };
138     QString str(data, 4);
139     //! [1]
140 }
141
142 void Widget::characterReference()
143 {
144     //! [2]
145     QString str;
146     str.resize(4);
147
148     str[0] = QChar('U');
149     str[1] = QChar('n');
150     str[2] = QChar(0x10e3);
151     str[3] = QChar(0x03a3);
152     //! [2]
153 }
154
155 void Widget::atFunction()
156 {
157     //! [3]
158     QString str;
159
160     for (int i = 0; i < str.size(); ++i) {
161         if (str.at(i) >= QChar('a') && str.at(i) <= QChar('f'))
162             qDebug() << "Found character in range [a-f]";
163     }
164     //! [3]
165 }
166
167 void Widget::stringLiteral()
168 {
169     //! [4]
170     QString str;
171
172     if (str == "auto" || str == "extern"
173             || str == "static" || str == "register") {
174         // ...
175     }
176     //! [4]
177 }
178
179 void Widget::modify()
180 {
181     //! [5]
182     QString str = "and";
183     str.prepend("rock ");     // str == "rock and"
184     str.append(" roll");        // str == "rock and roll"
185     str.replace(5, 3, "&");   // str == "rock & roll"
186     //! [5]
187 }
188
189 void Widget::index()
190 {
191     //! [6]
192     QString str = "We must be <b>bold</b>, very <b>bold</b>";
193     int j = 0;
194
195     while ((j = str.indexOf("<b>", j)) != -1) {
196         qDebug() << "Found <b> tag at index position" << j;
197         ++j;
198     }
199     //! [6]
200 }
201
202 //! [7]
203 QString Widget::boolToString(bool b)
204 {
205     QString result;
206     if (b)
207         result = "True";
208     else
209         result = "False";
210     return result;
211 }
212 //! [7]
213
214
215 void Widget::nullVsEmpty()
216 {
217     //! [8]
218     QString().isNull();               // returns true
219     QString().isEmpty();              // returns true
220
221     QString("").isNull();             // returns false
222     QString("").isEmpty();            // returns true
223
224     QString("abc").isNull();          // returns false
225     QString("abc").isEmpty();         // returns false
226     //! [8]
227 }
228
229 void Widget::appendFunction()
230 {
231     //! [9]
232     QString x = "free";
233     QString y = "dom";
234
235     x.append(y);
236     // x == "freedom"
237     //! [9]
238
239     //! [10]
240     x.insert(x.size(), y);
241     //! [10]
242 }
243
244 void Widget::argFunction()
245 {
246     //! [11]
247     QString i;           // current file's number
248     QString total;       // number of files to process
249     QString fileName;    // current file's name
250
251     QString status = QString("Processing file %1 of %2: %3")
252                     .arg(i).arg(total).arg(fileName);
253     //! [11]
254
255     //! [12] //! [13]
256     QString str;
257     //! [12]
258     str = "%1 %2";
259
260     str.arg("%1f", "Hello");        // returns "%1f Hello"
261     str.arg("%1f").arg("Hello");    // returns "Hellof %2"
262     //! [13]
263
264     //! [14]
265     str = QString("Decimal 63 is %1 in hexadecimal")
266             .arg(63, 0, 16);
267     // str == "Decimal 63 is 3f in hexadecimal"
268
269     QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedStates));
270     str = QString("%1 %L2 %L3")
271             .arg(12345)
272             .arg(12345)
273             .arg(12345, 0, 16);
274     // str == "12345 12,345 3039"
275     //! [14]
276 }
277
278 void Widget::chopFunction()
279 {
280     //! [15]
281     QString str("LOGOUT\r\n");
282     str.chop(2);
283     // str == "LOGOUT"
284     //! [15]
285 }
286
287 void Widget::compareFunction()
288 {
289     int x = QString::compare("auto", "auto");   // x == 0
290     int y = QString::compare("auto", "car");    // y < 0
291     int z = QString::compare("car", "auto");    // z > 0
292 }
293
294 void Widget::compareSensitiveFunction()
295 {
296     //! [16]
297     int x = QString::compare("aUtO", "AuTo", Qt::CaseInsensitive);  // x == 0
298     int y = QString::compare("auto", "Car", Qt::CaseSensitive);     // y > 0
299     int z = QString::compare("auto", "Car", Qt::CaseInsensitive);   // z < 0
300     //! [16]
301 }
302
303 void Widget::containsFunction()
304 {
305     //! [17]
306     QString str = "Peter Pan";
307     str.contains("peter", Qt::CaseInsensitive);    // returns true
308     //! [17]
309 }
310
311 void Widget::countFunction()
312 {
313     //! [18]
314     QString str = "banana and panama";
315     str.count(QRegExp("a[nm]a"));    // returns 4
316     //! [18]
317
318     //! [95]
319     QString str = "banana and panama";
320     str.count(QRegularExpression("a[nm]a"));    // returns 4
321     //! [95]
322 }
323
324 void Widget::dataFunction()
325 {
326     //! [19]
327     QString str = "Hello world";
328     QChar *data = str.data();
329     while (!data->isNull()) {
330         qDebug() << data->unicode();
331         ++data;
332     }
333     //! [19]
334 }
335
336 void Widget::endsWithFunction()
337 {
338     //! [20]
339     QString str = "Bananas";
340     str.endsWith("anas");         // returns true
341     str.endsWith("pple");         // returns false
342     //! [20]
343 }
344
345 void Widget::fillFunction()
346 {
347     //! [21]
348     QString str = "Berlin";
349     str.fill('z');
350     // str == "zzzzzz"
351
352     str.fill('A', 2);
353     // str == "AA"
354     //! [21]
355 }
356
357 void Widget::fromRawDataFunction()
358 {
359     //! [22]
360     QRegExp pattern;
361     static const QChar unicode[] = {
362             0x005A, 0x007F, 0x00A4, 0x0060,
363             0x1009, 0x0020, 0x0020};
364     int size = sizeof(unicode) / sizeof(QChar);
365
366     QString str = QString::fromRawData(unicode, size);
367     if (str.contains(QRegExp(pattern))) {
368         // ...
369     //! [22] //! [23]
370     }
371     //! [23]
372 }
373
374 void Widget::indexOfFunction()
375 {
376     //! [24]
377     QString x = "sticky question";
378     QString y = "sti";
379     x.indexOf(y);               // returns 0
380     x.indexOf(y, 1);            // returns 10
381     x.indexOf(y, 10);           // returns 10
382     x.indexOf(y, 11);           // returns -1
383     //! [24]
384 }
385
386 void Widget::firstIndexOfFunction()
387 {
388     //! [25]
389     QString str = "the minimum";
390     str.indexOf(QRegExp("m[aeiou]"), 0);       // returns 4
391     //! [25]
392
393     //! [93]
394     QString str = "the minimum";
395     str.indexOf(QRegularExpression("m[aeiou]"), 0);       // returns 4
396     //! [93]
397 }
398
399 void Widget::insertFunction()
400 {
401     //! [26]
402     QString str = "Meal";
403     str.insert(1, QString("ontr"));
404     // str == "Montreal"
405     //! [26]
406 }
407
408 void Widget::isEmptyFunction()
409 {
410     //! [27]
411     QString().isEmpty();            // returns true
412     QString("").isEmpty();          // returns true
413     QString("x").isEmpty();         // returns false
414     QString("abc").isEmpty();       // returns false
415     //! [27]
416 }
417
418 void Widget::isNullFunction()
419 {
420     //! [28]
421     QString().isNull();             // returns true
422     QString("").isNull();           // returns false
423     QString("abc").isNull();        // returns false
424     //! [28]
425 }
426
427 void Widget::lastIndexOfFunction()
428 {
429     //! [29]
430     QString x = "crazy azimuths";
431     QString y = "az";
432     x.lastIndexOf(y);           // returns 6
433     x.lastIndexOf(y, 6);        // returns 6
434     x.lastIndexOf(y, 5);        // returns 2
435     x.lastIndexOf(y, 1);        // returns -1
436     //! [29]
437
438     //! [30]
439     QString str = "the minimum";
440     str.lastIndexOf(QRegExp("m[aeiou]"));      // returns 8
441     //! [30]
442
443     //! [94]
444     QString str = "the minimum";
445     str.lastIndexOf(QRegularExpression("m[aeiou]"));      // returns 8
446     //! [94]
447 }
448
449 void Widget::leftFunction()
450 {
451     //! [31]
452     QString x = "Pineapple";
453     QString y = x.left(4);      // y == "Pine"
454     //! [31]
455 }
456
457 void Widget::leftJustifiedFunction()
458 {
459     //! [32]
460     QString s = "apple";
461     QString t = s.leftJustified(8, '.');    // t == "apple..."
462     //! [32]
463
464     //! [33]
465     QString str = "Pineapple";
466     str = str.leftJustified(5, '.', true);    // str == "Pinea"
467     //! [33]
468 }
469
470 void Widget::midFunction()
471 {
472     //! [34]
473     QString x = "Nine pineapples";
474     QString y = x.mid(5, 4);            // y == "pine"
475     QString z = x.mid(5);               // z == "pineapples"
476     //! [34]
477 }
478
479 void Widget::numberFunction()
480 {
481     //! [35]
482     long a = 63;
483     QString s = QString::number(a, 16);             // s == "3f"
484     QString t = QString::number(a, 16).toUpper();     // t == "3F"
485     //! [35]
486 }
487
488 void Widget::prependFunction()
489 {
490     //! [36]
491     QString x = "ship";
492     QString y = "air";
493     x.prepend(y);
494     // x == "airship"
495     //! [36]
496 }
497
498 void Widget::removeFunction()
499 {
500     //! [37]
501     QString s = "Montreal";
502     s.remove(1, 4);
503     // s == "Meal"
504     //! [37]
505
506     //! [38]
507     QString t = "Ali Baba";
508     t.remove(QChar('a'), Qt::CaseInsensitive);
509     // t == "li Bb"
510     //! [38]
511
512     //! [39]
513     QString r = "Telephone";
514     r.remove(QRegExp("[aeiou]."));
515     // r == "The"
516     //! [39]
517
518     //! [96]
519     QString r = "Telephone";
520     r.remove(QRegularExpression("[aeiou]."));
521     // r == "The"
522     //! [96]
523 }
524
525 void Widget::replaceFunction()
526 {
527     //! [40]
528     QString x = "Say yes!";
529     QString y = "no";
530     x.replace(4, 3, y);
531     // x == "Say no!"
532     //! [40]
533
534     //! [41]
535     QString str = "colour behaviour flavour neighbour";
536     str.replace(QString("ou"), QString("o"));
537     // str == "color behavior flavor neighbor"
538     //! [41]
539
540     //! [42]
541     QString s = "Banana";
542     s.replace(QRegExp("a[mn]"), "ox");
543     // s == "Boxoxa"
544     //! [42]
545
546     //! [43]
547     QString t = "A <i>bon mot</i>.";
548     t.replace(QRegExp("<i>([^<]*)</i>"), "\\emph{\\1}");
549     // t == "A \\emph{bon mot}."
550     //! [43]
551
552     //! [86]
553     QString equis = "xxxxxx";
554     equis.replace("xx", "x");
555     // equis == "xxx"    
556     //! [86]
557
558     //! [87]
559     QString s = "Banana";
560     s.replace(QRegularExpression("a[mn]"), "ox");
561     // s == "Boxoxa"
562     //! [87]
563
564     //! [88]
565     QString t = "A <i>bon mot</i>.";
566     t.replace(QRegularExpression("<i>([^<]*)</i>"), "\\emph{\\1}");
567     // t == "A \\emph{bon mot}."
568     //! [88]
569 }
570
571 void Widget::reserveFunction()
572 {
573     //! [44]
574     QString result;
575     int maxSize;
576     bool condition;
577     QChar nextChar;
578
579     result.reserve(maxSize);
580
581     while (condition)
582         result.append(nextChar);
583
584     result.squeeze();
585     //! [44]
586 }
587
588 void Widget::resizeFunction()
589 {
590     //! [45]
591     QString s = "Hello world";
592     s.resize(5);
593     // s == "Hello"
594
595     s.resize(8);
596     // s == "Hello???" (where ? stands for any character)
597     //! [45]
598
599     //! [46]
600     QString t = "Hello";
601     t += QString(10, 'X');
602     // t == "HelloXXXXXXXXXX"
603     //! [46]
604
605     //! [47]
606     QString r = "Hello";
607     r = r.leftJustified(10, ' ');
608     // r == "Hello     "
609     //! [47]
610 }
611
612 void Widget::rightFunction()
613 {
614     //! [48]
615     QString x = "Pineapple";
616     QString y = x.right(5);      // y == "apple"
617     //! [48]
618 }
619
620 void Widget::rightJustifiedFunction()
621 {
622     //! [49]
623     QString s = "apple";
624     QString t = s.rightJustified(8, '.');    // t == "...apple"
625     //! [49]
626
627     //! [50]
628     QString str = "Pineapple";
629     str = str.rightJustified(5, '.', true);    // str == "Pinea"
630     //! [50]
631 }
632
633 void Widget::sectionFunction()
634 {
635     //! [51] //! [52]
636     QString str;
637     //! [51]
638     QString csv = "forename,middlename,surname,phone";
639     QString path = "/usr/local/bin/myapp"; // First field is empty
640     QString::SectionFlag flag = QString::SectionSkipEmpty;
641
642
643     str = csv.section(',', 2, 2);   // str == "surname"
644     str = path.section('/', 3, 4);  // str == "bin/myapp"
645     str = path.section('/', 3, 3, flag); // str == "myapp"
646     //! [52]
647
648     //! [53]
649     str = csv.section(',', -3, -2);  // str == "middlename,surname"
650     str = path.section('/', -1); // str == "myapp"
651     //! [53]
652
653     //! [54]
654     QString data = "forename**middlename**surname**phone";
655
656     str = data.section("**", 2, 2); // str == "surname"
657     str = data.section("**", -3, -2); // str == "middlename**surname"
658     //! [54]
659
660     //! [55]
661     QString line = "forename\tmiddlename  surname \t \t phone";
662     QRegExp sep("\\s+");
663     str = line.section(sep, 2, 2); // str == "surname"
664     str = line.section(sep, -3, -2); // str == "middlename  surname"
665     //! [55]
666
667     //! [89]
668     QString line = "forename\tmiddlename  surname \t \t phone";
669     QRegularExpression sep("\\s+");
670     str = line.section(sep, 2, 2); // str == "surname"
671     str = line.section(sep, -3, -2); // str == "middlename  surname"
672     //! [89]
673 }
674
675 void Widget::setNumFunction()
676 {
677     //! [56]
678     QString str;
679     str.setNum(1234);       // str == "1234"
680     //! [56]
681 }
682
683 void Widget::simplifiedFunction()
684 {
685     //! [57]
686     QString str = "  lots\t of\nwhitespace\r\n ";
687     str = str.simplified();
688     // str == "lots of whitespace";
689     //! [57]
690 }
691
692 void Widget::sizeFunction()
693 {
694     //! [58]
695     QString str = "World";
696     int n = str.size();         // n == 5
697     str.data()[0];              // returns 'W'
698     str.data()[4];              // returns 'd'
699     str.data()[5];              // returns '\0'
700     //! [58]
701 }
702
703 void Widget::splitFunction()
704 {
705     //! [59]
706     QString str;
707     QStringList list;
708
709     str = "Some  text\n\twith  strange whitespace.";
710     list = str.split(QRegExp("\\s+"));
711     // list: [ "Some", "text", "with", "strange", "whitespace." ]
712     //! [59]
713
714     //! [60]
715     str = "This time, a normal English sentence.";
716     list = str.split(QRegExp("\\W+"), QString::SkipEmptyParts);
717     // list: [ "This", "time", "a", "normal", "English", "sentence" ]
718     //! [60]
719
720     //! [61]
721     str = "Now: this sentence fragment.";
722     list = str.split(QRegExp("\\b"));
723     // list: [ "", "Now", ": ", "this", " ", "sentence", " ", "fragment", "." ]
724     //! [61]
725
726     //! [90]
727     QString str;
728     QStringList list;
729
730     str = "Some  text\n\twith  strange whitespace.";
731     list = str.split(QRegularExpression("\\s+"));
732     // list: [ "Some", "text", "with", "strange", "whitespace." ]
733     //! [90]
734
735     //! [91]
736     str = "This time, a normal English sentence.";
737     list = str.split(QRegularExpression("\\W+"), QString::SkipEmptyParts);
738     // list: [ "This", "time", "a", "normal", "English", "sentence" ]
739     //! [91]
740
741     //! [92]
742     str = "Now: this sentence fragment.";
743     list = str.split(QRegularExpression("\\b"));
744     // list: [ "", "Now", ": ", "this", " ", "sentence", " ", "fragment", "." ]
745     //! [92]
746 }
747
748 void Widget::splitCaseSensitiveFunction()
749 {
750     //! [62]
751     QString str = "a,,b,c";
752
753     QStringList list1 = str.split(",");
754     // list1: [ "a", "", "b", "c" ]
755
756     QStringList list2 = str.split(",", QString::SkipEmptyParts);
757     // list2: [ "a", "b", "c" ]
758     //! [62]
759 }
760
761 void Widget::sprintfFunction()
762 {
763     //! [63]
764     size_t BufSize;
765     char buf[BufSize];
766
767     ::snprintf(buf, BufSize, "%lld", 123456789LL);
768     QString str = QString::fromAscii(buf);
769     //! [63]
770
771     //! [64]
772     QString result;
773     QTextStream(&result) << "pi = " << 3.14;
774     // result == "pi = 3.14"
775     //! [64]
776 }
777
778 void Widget::startsWithFunction()
779 {
780     //! [65]
781     QString str = "Bananas";
782     str.startsWith("Ban");     // returns true
783     str.startsWith("Car");     // returns false
784     //! [65]
785 }
786
787 void Widget::toDoubleFunction()
788 {
789     //! [66]
790     QString str = "1234.56";
791     double val = str.toDouble();   // val == 1234.56
792     //! [66]
793
794     //! [67]
795     bool ok;
796     double d;
797
798     d = QString( "1234.56e-02" ).toDouble(&ok); // ok == true, d == 12.3456
799     //! [67]
800
801     //! [68]
802     d = QString( "1234,56" ).toDouble(&ok); // ok == false
803     d = QString( "1234.56" ).toDouble(&ok); // ok == true, d == 1234.56
804     //! [68]
805
806     //! [69]
807     d = QString( "1,234,567.89" ).toDouble(&ok); // ok == false
808     d = QString( "1234567.89" ).toDouble(&ok); // ok == true
809      //! [69]
810 }
811
812 void Widget::toFloatFunction()
813 {
814     //! [71]
815     QString str1 = "1234.56";
816     str1.toFloat();             // returns 1234.56
817
818     bool ok;
819     QString str2 = "R2D2";
820     str2.toFloat(&ok);          // returns 0.0, sets ok to false
821     //! [71]
822 }
823
824 void Widget::toIntFunction()
825 {
826     //! [72]
827     QString str = "FF";
828     bool ok;
829     int hex = str.toInt(&ok, 16);       // hex == 255, ok == true
830     int dec = str.toInt(&ok, 10);       // dec == 0, ok == false
831     //! [72]
832 }
833
834 void Widget::toLongFunction()
835 {
836     //! [73]
837     QString str = "FF";
838     bool ok;
839
840     long hex = str.toLong(&ok, 16);     // hex == 255, ok == true
841     long dec = str.toLong(&ok, 10);     // dec == 0, ok == false
842     //! [73]
843 }
844
845 void Widget::toLongLongFunction()
846 {
847     //! [74]
848     QString str = "FF";
849     bool ok;
850
851     qint64 hex = str.toLongLong(&ok, 16);      // hex == 255, ok == true
852     qint64 dec = str.toLongLong(&ok, 10);      // dec == 0, ok == false
853     //! [74]
854 }
855
856 void Widget::toLowerFunction()
857 {
858     //! [75]
859     QString str = "Qt by NOKIA";
860     str = str.toLower();        // str == "qt by nokia"
861     //! [75]
862 }
863
864 void Widget::toShortFunction()
865 {
866     //! [76]
867     QString str = "FF";
868     bool ok;
869
870     short hex = str.toShort(&ok, 16);   // hex == 255, ok == true
871     short dec = str.toShort(&ok, 10);   // dec == 0, ok == false
872     //! [76]
873 }
874
875 void Widget::toUIntFunction()
876 {
877     //! [77]
878     QString str = "FF";
879     bool ok;
880
881     uint hex = str.toUInt(&ok, 16);     // hex == 255, ok == true
882     uint dec = str.toUInt(&ok, 10);     // dec == 0, ok == false
883     //! [77]
884 }
885
886 void Widget::toULongFunction()
887 {
888     //! [78]
889     QString str = "FF";
890     bool ok;
891
892     ulong hex = str.toULong(&ok, 16);   // hex == 255, ok == true
893     ulong dec = str.toULong(&ok, 10);   // dec == 0, ok == false
894     //! [78]
895 }
896
897 void Widget::toULongLongFunction()
898 {
899     //! [79]
900     QString str = "FF";
901     bool ok;
902
903     quint64 hex = str.toULongLong(&ok, 16);    // hex == 255, ok == true
904     quint64 dec = str.toULongLong(&ok, 10);    // dec == 0, ok == false
905     //! [79]
906 }
907
908 void Widget::toUShortFunction()
909 {
910     //! [80]
911     QString str = "FF";
912     bool ok;
913
914     ushort hex = str.toUShort(&ok, 16);     // hex == 255, ok == true
915     ushort dec = str.toUShort(&ok, 10);     // dec == 0, ok == false
916     //! [80]
917 }
918
919 void Widget::toUpperFunction()
920 {
921     //! [81]
922     QString str = "TeXt";
923     str = str.toUpper();        // str == "TEXT"
924     //! [81]
925 }
926
927 void Widget::trimmedFunction()
928 {
929     //! [82]
930     QString str = "  lots\t of\nwhitespace\r\n ";
931     str = str.trimmed();
932     // str == "lots\t of\nwhitespace"
933     //! [82]
934 }
935
936 void Widget::truncateFunction()
937 {
938     //! [83]
939     QString str = "Vladivostok";
940     str.truncate(4);
941     // str == "Vlad"
942     //! [83]
943 }
944
945 void Widget::plusEqualOperator()
946 {
947     //! [84]
948     QString x = "free";
949     QString y = "dom";
950     x += y;
951     // x == "freedom"
952     //! [84]
953 }
954
955 void Widget::arrayOperator()
956 {
957     //! [85]
958     QString str;
959
960     if (str[0] == QChar('?'))
961         str[0] = QChar('_');
962     //! [85]
963 }
964
965 void Widget::midRefFunction()
966 {
967     //! [midRef]
968     QString x = "Nine pineapples";
969     QStringRef y = x.midRef(5, 4);      // y == "pine"
970     QStringRef z = x.midRef(5);         // z == "pineapples"
971     //! [midRef]
972 }
973
974 void Widget::leftRefFunction()
975 {
976     //! [leftRef]
977     QString x = "Pineapple";
978     QStringRef y = x.leftRef(4);        // y == "Pine"
979     //! [leftRef]
980 }
981
982 void Widget::rightRefFunction()
983 {
984     //! [rightRef]
985     QString x = "Pineapple";
986     QStringRef y = x.rightRef(5);       // y == "apple"
987     //! [rightRef]
988 }
989
990
991 int main(int argc, char *argv[])
992 {
993     QApplication app(argc, argv);
994     Widget widget;
995     widget.show();
996     return app.exec();
997 }