Grafische Ausgaben mit Qt/C++ unter Mac OS X Leopard
Es handelt sich um ein generelles Thema in der Anwendungsprogrammierung. Ausgaben grafisch sichtbar machen und für statistische Zwecke oder Verbesserungsmöglichkeit der Software nutzen. Es bestehen immer viele Lösungsansätze, wovon ich die einfachsten in reinem C++ unter Qt aufgearbeitet habe. Natürlich ist es mit C++ nicht unbedingt eine grafische Ausgabe, als vielmehr eine Ausgabe auf der Konsole (Shell, Unix-Shell, MS DOS Eingabeaufforderung, Bash usw. - Begriffe dafür gibt es genügend).
1. Eine einfache Ausgabe in C++ wird unter Umständen so aussehen:
-
/* stl header */
-
#include <iostream>
-
/* default stl namespace */
-
using namespace std;
-
/* simple not-graphical output in stl code */
-
cout << "testoutput" << endl;
Unter Verwendung des standardmäßigen Namespaces der STL erhalten wir die Ausgabe “testoutput”, mit “endl” (End of Line) definieren wir das Ende sowie einen Zeilenumbruch.
2. Unter der Verwendung von Qt erhalten wir ein ähnliches Ergebnis, allerdings einen Tick kürzer als mit der STL:
-
/* qt header */
-
#include <QtDebug>
-
/* simple not-graphical output in qt code */
-
qDebug() << "testoutput";
Beide Beispiele laufen problemlos unter allen Betriebssystemen, darunter natürlich auch Mac OS X 10.5 alias Leopard.
Um die Ausgabe jetzt grafisch zu gestalten, nehmen wir uns ein Oberflächenelement (Widget) von Qt zur Hilfe, und zwar eine Textausgabe. Es handelt sich um die Klasse QTextEdit.
3. Grafische Ausgabe mit QTextEdit unter Leopard:
-
/* qt header */
-
#include <QTextEdit>
-
/* create a textedit */
-
QTextEdit *myTextEdit = new QTextEdit;
-
/* show textedit */
-
myTextEdit -> show();
-
/* append text to textedit */
-
myTextEdit -> append( "testoutput" );
Generell benötigen wir kaum mehr Code und unser Ergebnis sieht wie folgt aus:
Wir können es natürlich noch in der Reihenfolge verändern, bzw. einen Titel mit setWindowTitle oder ein Icon mit setWindowIcon hinzufügen. Aber verschönern kann man GUI-Elemente natürlich immer.
Damit wir nun eine sinnvolle Aufgabe vergeben, geben wir die Fehler/Meldungen von Qt in unserem Textedit aus (hierfür benötigen wir zu Beginn eine Funktion, die bei einer Meldung immer wieder ausgeführt wird - “Callback” genannt). Es handelt sich um die vollständige Main-Funktion zum Starten einer Anwendung. Dieses Beispiel steht Ihnen nach dem Quelltext zum Download zur Verfügung.
4. Grafische Ausgabe von Qt-Meldungen mit QTextEdit unter Leopard:
-
/* qt header */
-
#include <QApplication>
-
#include <QTextEdit>
-
-
/* our textedit */
-
static QTextEdit *myTextEdit;
-
-
void myMessageOutput( QtMsgType type, const char *msg ) {
-
switch ( type ) {
-
/* a debug message */
-
case QtDebugMsg:
-
/* append a message */
-
myTextEdit -> append( QString( "Debug: %1" ).arg( msg ) );
-
break;
-
/* a warning message */
-
case QtWarningMsg:
-
/* append a message */
-
myTextEdit -> append( QString( "Warning: %1" ).arg( msg ) );
-
break;
-
/* a critical message */
-
case QtCriticalMsg:
-
/* append a message */
-
myTextEdit -> append( QString( "Critical: %1" ).arg( msg ) );
-
break;
-
/* a fatal message */
-
case QtFatalMsg:
-
/* append a message */
-
myTextEdit -> append( QString( "Fatal: %1" ).arg( msg ) );
-
abort();
-
}
-
}
-
-
int main( int argc, char **argv ) {
-
/* install qt message handler */
-
qInstallMsgHandler( myMessageOutput );
-
/* add application instance */
-
QApplication app( argc, argv );
-
/* create a textedit */
-
myTextEdit = new QTextEdit;
-
/* show the textedit */
-
myTextEdit -> show();
-
/* return the application instance and run in idle mode */
-
return app.exec();
-
}
Download: /examples/mytextedit-0.1.tar.gz (716 Bytes)
Sie benötigen eine Softwareprogrammierung mit Oberflächenelementen in zeitgemäßem Design? Nehmen Sie doch einfach telefonisch oder per eMail mit mir Kontakt auf. Ich freue mich über Ihre Projektanfragen. Bitte beachten Sie, dass hier oft nur sehr einfache Beispiele verwendet werden, die die Allgemeinheit verständlicher findet als komplexe Softwareentwicklung unter Qt. Allerdings veröffentliche ich auch solche von Zeit zu Zeit (gerne auch nach Anregung).
Florian Becker
–
Pyades Technologies GmbH
Römerstr. 4 L
55232 Alzey
Tel: +49 (0) 67 31.998 78 66
Mob: +49 (0) 163.680 35 64
Fax: +49 (0) 67 31.998 78 67
Webseite: www.pyades.com
Amtsgericht: Mainz HRB 41299
Geschäftsführer: Florian Becker
Schlagworte: bash, c++, console, debugausgabe, eingabeaufforderung, grafische ausgabe, leopard, mac, mac os x, qt, qtextarea, shell, stl, trolltech, unix, vista, windows, xp
