Login
Newsletter
Werbung

Mo, 21. Januar 2002, 00:00

Qt-Programmierung Teil 2

In diesem zweiten Teil wird ein erweitertes HalloWelt-Programm erstellt.

Heutiges Ziel?

Ein erweitertes HalloWelt-Programm

Thomas Gern

Ein erweitertes HalloWelt-Programm

Das neue Formular im GUI Designer

Thomas Gern

Das neue Formular im GUI Designer

Was programmiert man, wenn man sich mit einer neuen Programmiersprache (oder hier: mit einem neuen Framework) vertraut machen möchte? Richtig. Man erstellt ein HalloWelt-Programm. Allerdings möchte ich hier nicht zeigen, wie man ein Konsolenprogramm erstellt. Das wäre auch zu langweilig. Im einundzwanzigsten Jahrhundert muss es schon ein bisschen mehr sein. Ziel wird es sein, ein erweitertes HalloWelt-Programm zu erstellen. Hierzu wird auch der Qt GUI-Designer in die Arbeit mit einbezogen. Mit dem Qt GUI-Designer lassen sich wie mit einem RAD-Tool (RAD = Rapid Application Development) in kürzester Zeit neue Widgets (in diesem Beispiel: ein Formular) ganz einfach und unkompliziert zusammenklicken.

Die grafische Oberfläche kann man hierbei sehr bequem mit dem Qt GUI-Designer erstellen. Über DateiNeuWidget ein neues Formular beginnen, folgende Widgets darauf platzieren und die Datei als CHelloWorldWindow.ui abspeichern.

  • 1x QButtonGroup
  • 2x QLabel
  • 1x QLineEdit
  • 1x QPushButton
  • 2x QRadioButton (in die QButtonGroup setzen!)

Nachdem das neue Formular entworfen und abgespeichert ist, sollte die vom GUI-Designer erzeugte XML-Datei folgendermaßen aussehen:

  1  <!DOCTYPE UI>
<UI>
2 <class>CHelloWorldWindow</class>
3 <widget>
4 <class>QWidget</class>
5 <property stdset="1">
6 <name>name</name>
7 <cstring>Form1</cstring>
8 </property>
9 <property stdset="1">
10 <name>geometry</name>
11 <rect>
12 <x>0</x>
13 <y>0</y>
14 <width>401</width>
15 <height>243</height>
16 </rect>
17 </property>
18 <property stdset="1">
19 <name>caption</name>
20 <string>Erweitertes Hallo Welt!</string>
21 </property>
22 <widget>
23 <class>QLabel</class>
24 <property stdset="1">
25 <name>name</name>
26 <cstring>TextLabel2</cstring>
27 </property>
28 <property stdset="1">
29 <name>geometry</name>
30 <rect>
31 <x>30</x>
32 <y>40</y>
33 <width>53</width>
34 <height>20</height>
35 </rect>
36 </property>
37 <property stdset="1">
38 <name>text</name>
39 <string>Ihr Name:</string>
40 </property>
41 </widget>
42 <widget>
43 <class>QLabel</class>
44 <property stdset="1">
45 <name>name</name>
46 <cstring>TextLabel1</cstring>
47 </property>
48 <property stdset="1">
49 <name>geometry</name>
50 <rect>
51 <x>30</x>
52 <y>10</y>
53 <width>350</width>
54 <height>20</height>
55 </rect>
56 </property>
57 <property stdset="1">
58 <name>text</name>
59 <string>Bitte geben Sie Ihren Namen und Ihren Gemütszustand an.</string>
60 </property>
61 </widget>
62 <widget>
63 <class>QPushButton</class>
64 <property stdset="1">
65 <name>name</name>
66 <cstring>PushButton1</cstring>
67 </property>
68 <property stdset="1">
69 <name>geometry</name>
70 <rect>
71 <x>280</x>
72 <y>60</y>
73 <width>93</width>
74 <height>26</height>
75 </rect>
76 </property>
77 <property stdset="1">
78 <name>text</name>
79 <string>&amp;Fertig</string>
80 </property>
81 </widget>
82 <widget>
83 <class>QLineEdit</class>
84 <property stdset="1">
85 <name>name</name>
86 <cstring>LineEdit1</cstring>
87 </property>
88 <property stdset="1">
89 <name>geometry</name>
90 <rect>
91 <x>30</x>
92 <y>60</y>
93 <width>230</width>
94 <height>22</height>
95 </rect>
96 </property>
97 </widget>
98 <widget>
99 <class>QButtonGroup</class>
100 <property stdset="1">
101 <name>name</name>
102 <cstring>ButtonGroup1</cstring>
103 </property>
104 <property stdset="1">
105 <name>geometry</name>
106 <rect>
107 <x>30</x>
108 <y>100</y>
109 <width>340</width>
110 <height>110</height>
111 </rect>
112 </property>
113 <property stdset="1">
114 <name>title</name>
115 <string>&amp;Ihnen geht es heute ...</string>
116 </property>
117 <widget>
118 <class>QRadioButton</class>
119 <property stdset="1">
120 <name>name</name>
121 <cstring>RadioButton1</cstring>
122 </property>
123 <property stdset="1">
124 <name>geometry</name>
125 <rect>
126 <x>20</x>
127 <y>30</y>
128 <width>85</width>
129 <height>20</height>
130 </rect>
131 </property>
132 <property stdset="1">
133 <name>text</name>
134 <string>... &amp;gut</string>
135 </property>
136 </widget>
137 <widget>
138 <class>QRadioButton</class>
139 <property stdset="1">
140 <name>name</name>
141 <cstring>RadioButton2</cstring>
142 </property>
143 <property stdset="1">
144 <name>geometry</name>
145 <rect>
146 <x>20</x>
147 <y>70</y>
148 <width>85</width>
149 <height>20</height>
150 </rect>
151 </property>
152 <property stdset="1">
153 <name>text</name>
154 <string>... &amp;schlecht</string>
155 </property>
156 </widget>
157 </widget>
158 </widget>
159 </UI>
Vom GUI Designer erzeugte XML Datei: CHelloWorldWindow.ui

Hat man mit dem GUI-Designer ein neues Widget erstellt, nimmt man die *.ui-Datei in das TMake-Skript auf. TMake sorgt dann schon dafür, dass aus der *.ui Datei der Header und der Quellcode erzeugt werden. Die *.ui-Datei wird in dem TMake-Skript hinter INTERFACES= angeben.

Jetzt existiert zwar ein neues Widget. aber damit man es sinnvoll verwenden kann. muss man sich hiervon noch eine eigene Klasse ableiten. In diesem Beispiel wird von CHelloWorldWindow die Klasse CHelloWorld abgeleitet und der virtuelle Slot showGreeting() wird implementiert. Einen eigenen Konstruktor muss man nicht schreiben, es reicht, den Konstruktor der Vaterklasse aufzurufen, da dort bereits alle Widgets initialisiert werden.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung