Artikel-Schlagworte: „mac“

Grafische Ausgaben mit Qt/C++ unter Mac OS X Leopard

Freitag, 30. Mai 2008

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:

  1. /* stl header */
  2. #include <iostream>
  3. /* default stl namespace */
  4. using namespace std;
  5. /* simple not-graphical output in stl code */
  6. 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:

  1. /* qt header */
  2. #include <QtDebug>
  3. /* simple not-graphical output in qt code */
  4. 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:

  1. /* qt header */
  2. #include <QTextEdit>
  3. /* create a textedit */
  4. QTextEdit *myTextEdit = new QTextEdit;
  5. /* show textedit */
  6. myTextEdit -> show();
  7. /* append text to textedit */
  8. myTextEdit -> append( "testoutput" );

Generell benötigen wir kaum mehr Code und unser Ergebnis sieht wie folgt aus:

Grafische Ausgabe mit Qt/C++ unter Mac OS X Leopard

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:

  1. /* qt header */
  2. #include <QApplication>
  3. #include <QTextEdit>
  4.  
  5. /* our textedit */
  6. static QTextEdit *myTextEdit;
  7.  
  8. void myMessageOutput( QtMsgType type, const char *msg ) {
  9.   switch ( type ) {
  10.     /* a debug message */
  11.     case QtDebugMsg:
  12.       /* append a message */
  13.       myTextEdit -> append( QString( "Debug: %1" ).arg( msg ) );
  14.       break;
  15.     /* a warning message */
  16.     case QtWarningMsg:
  17.       /* append a message */
  18.       myTextEdit -> append( QString( "Warning: %1" ).arg( msg ) );
  19.       break;
  20.     /* a critical message */
  21.     case QtCriticalMsg:
  22.       /* append a message */
  23.       myTextEdit -> append( QString( "Critical: %1" ).arg( msg ) );
  24.       break;
  25.     /* a fatal message */
  26.     case QtFatalMsg:
  27.       /* append a message */
  28.       myTextEdit -> append( QString( "Fatal: %1" ).arg( msg ) );
  29.       abort();
  30.   }
  31. }
  32.  
  33. int main( int argc, char **argv ) {
  34.   /* install qt message handler */
  35.   qInstallMsgHandler( myMessageOutput );
  36.   /* add application instance */
  37.   QApplication app( argc, argv );
  38.   /* create a textedit */
  39.   myTextEdit = new QTextEdit;
  40.   /* show the textedit */
  41.   myTextEdit -> show();
  42.   /* return the application instance and run in idle mode */
  43.   return app.exec();
  44. }

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

Datenmigration unterschiedlicher Systeme

Donnerstag, 3. April 2008

Es wird immer wichtiger, dass verschiedene Architekturen auf unterschiedlichen Systemen reibungslos und zeitsparender zusammen arbeiten. Es gibt verschiedenste Konstellationen, bei denen eine Migration Sinn macht. Ich möchte Ihnen hier anhand von einem Alltagsproblem eine Möglichkeiten nennen um eine Lösung zu finden.

Unterschiedliche Datenstrukturen mit verschiedenen Betriebssystemen und Mehrfachnutzungen

Sie greifen von unterschiedlichen Clients auf verschiedene Datenbestände zu, sowohl die verschiedenen Datenbanken, wie auch die unterschiedlichen Betriebssysteme machen dabei Probleme, denn der Bestand befindet sich im nicht konsolidierten Zustand bis zur manuellen oder automatischen Migration. Mehrfachnutzungen belasten das Netzwerk zusätzlich und verlangen den Benutzern mehr ab als nötig sein sollte. Sehen Sie dazu folgende, oft anzutreffende, Konstellation:

Ich kann Ihnen bei diesem Problem eine Echtzeitlösung anbieten. Je nach Umfang des Datenbestands und nach Komplexität der Clients ist ein solches Projekt in durchschnittlich sechs Monaten realisierbar. Sofort nach Umstellung ist eine Einsparung garantiert, denn wir achten bei der Entwicklung auf gleichbleibende Funktionsweise. Bewährte Funktionen aus allen Systemen werden intelligent umgestellt. Im gleichen Schritt kann man natürlich auch eigene Funktionen implementieren und nach eigenen Wünschen erweitern. Nach einer Migration wird Ihr System wie folgt aussehen:

Man kann im direkten Vergleich feststellen, dass der Wegfall von Datenbankservern und unterschiedlicher Client Software zu einer massiven Einsparung führen.

Die Migration von Datenbeständen ist natürlich eine langfristige Investition - aber selbst hierfür biete ich Ihnen eine sichere Lösung. Mit einer Bedarfsanalyse in Ihrem Unternehmen zu einem Festpreis von 500,00 Euro zzgl. Umsatzsteuer pro Tag gehen Sie ein sehr geringes Risiko ein. Eine Analyse in Ihren Räumen mit den nötigen Ansprechpartnern liegt bei normalerweise einem Tag Aufwand, je nach Systemgröße. Danach haben Sie über den tatsächlichen Umfang Gewissheit und auch eine Analyse zur Kostenreduzierung.

Bei Interesse rufen Sie mich doch einfach an oder schreiben Sie mir eine eMail.

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