Einführung in die Programmierung



Ähnliche Dokumente
Einführung in die Programmierung Wintersemester 2011/12

Einführung in die Programmierung

Einführung in die Programmierung Wintersemester 2010/11

Einführung in die Programmierung

Einführung in die Programmierung

Einführung in die Programmierung

Einführung in die Programmierung Wintersemester 2012/13

Einführung in die Programmierung Wintersemester 2014/15

Was ist QT? Beispiele: KDE Google Earth Mathematika

Praktikum IKT 3. Semester

Interaktive Simulationen Lektion 1/3: Event-Driven Design und Signals

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Programmierung

GUI Programmierung mit Qt

Qt Programmierung Teil 1 Fenster erstellen by NBBN ( CrashKurs-Artig. Was brauche ich? -Einige C++ Kenntnisse

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Klausur in Programmieren

Klausur in Programmieren

Delegatesund Ereignisse

Grafische Benutzeroberfläche mit Glade und Python

Einführung in die Programmierung Wintersemester 2009/10

5. Programmierung von Benutzerschnittstellen

Informatik I (D-MAVT)

Kap. 35 Swing: Grundlagen Kap Swing: Hauptfenster

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Vorkurs C++ Programmierung

Local Control Network Technische Dokumentation

Benutzeroberflächen. Java Teil 4

Übersicht GUI PyQT TU Dresden, Sommerkurs Python GUI Folie 1 von XYZ

Qt-Projekte mit Visual Studio 2005

Einführung in die Programmierung mit Qt

WPF Steuerelemente Listbox, ComboBox, ListView,

Objektbasierte Entwicklung

Java: Vererbung. Teil 3: super()

GUI Programmierung mit GTK

DAUERHAFTE ÄNDERUNG VON SCHRIFTART, SCHRIFTGRÖßE

Installation und Inbetriebnahme von Microsoft Visual C Express

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

2. Semester, 2. Prüfung, Lösung

Angewandte Mathematik und Programmierung

Einführung in die Programmierung (EPR)

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Objektorientierte Programmierung. Kapitel 12: Interfaces

Grundlagen der Informatik Entwicklung von Anwendungen mit dem Qt-Framework

Graphische Benutzungsoberflächen

Java Kurs für Anfänger Einheit 5 Methoden

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Übungen zu C++ Kapitel 1

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

Programmieren in Java

Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista

Java Einführung Abstrakte Klassen und Interfaces

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen

Besonderheiten von C#

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Informatik in der Elektrotechnik (BIE) Aufnahme des Übungsbetriebs

Grundfunktionen und Bedienung

Native Zeichenketten (C-Strings)

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Kompatibilitätsmodus und UAC

Benutzerleitfaden MobDat-CSG (Nutzung des Heimrechners für dienstliche Zwecke)

Windows 7 Winbuilder USB Stick

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

LISP. Eine Einführung

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Informatik Kurs 12 André Hoffmann. Delphi. Einführung in die Windows- Programmierung

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

4D Server v12 64-bit Version BETA VERSION

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Grundlagen. Kapitel 1

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

MSDE 2000 mit Service Pack 3a

Übungen zur Softwaretechnik

1 Vom Problem zum Programm

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einstieg in die Informatik mit Java

tentoinfinity Apps 1.0 EINFÜHRUNG

Einführung in die Programmierung

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Einführung in Eclipse und Java

Carolo Knowledge Base

Tipps und Tricks zu Netop Vision und Vision Pro

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Visualisierung auf Büro PC s mit dem ibricks Widget

DriveLock 6. DriveLock und das Windows Sicherheitsproblem mit LNK Dateien. CenterTools Software GmbH

Installation / Aktualisierung von Druckertreibern unter Windows 7

Anleitung zur Nutzung des SharePort Utility

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

WPF Bindung. Dr. Beatrice Amrhein

Programmierkurs Java

Java Projekt: Tic Tac Toe + GUI

13. Tutorium zu Programmieren

Einführung in die Programmierung GUI Programmierung Teil 3

Programmentwicklung mit C++ (unter Unix/Linux)

SCHNELLEINSTIEG ZUM TOOL NODEBUILDER

Transkript:

: Inhalt Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Was ist eine GUI? Was ist QT? Erste Schritte: Hello World! Signals & Slots: SpinBoxSlider Anwendung: Temperaturumrechnung Lösung ohne GUI (Ein- und Ausgabe an Konsole) Lösung mit GUI Größere Anwendung: Grafik ( nächste Vorlesung) 2 GUI = Graphical User Interface (grafische Benutzerschnittstelle) Funktionalität wird durch Programm-Bibliothek bereit gestellt z.b. als Teil der MFC (Microsoft Foundation Classes) z.b. X-Window System, Version 11 (X11) hier: Qt 4.1.0 ( Quasar toolkit ) aktuell: Qt 4.6.1 (abwärtskompatibel) http://www.trolltech.com Umleitung zu NOKIA Warum? 1. Plattform-unabhängig: läuft unter Linux/Unix, Windows, MacOS, u.a. 2. Für nicht-kommerziellen Einsatz frei verfügbar (unter GPL), allerdings ohne Support u.a. Annehmlichkeiten Qt System übergreifende Bibliothek stellt Objekte und Funktionen zur Verfügung, mit denen unabhängig vom Betriebssystem (Linux/Unix, Windows, MacOS) Programme erstellt werden können Hauptverwendungszweck: Graphische Benutzeroberflächen (GUIs) für unterschiedliche Betriebssysteme erstellen, ohne den Code für jedes System neu zu schreiben Oberfläche KDE (Linux/Mac), Google Earth, Skype basiert auf Qt 3 4 1

Qt Klassen Qt Klassen (Ausschnitt) ca. 500 QObject QApplication QWidget QCanvas QButton QSlider 5 6 : Getting started Button ( Schaltfläche ) mit Text Hello World! Hello world! x Button ( Schaltfläche ) mit Text Hello World! Was geschieht wenn Button gedrückt wird? Anscheinend nichts! QPushButton hello("hello world!", 0 hello.resize(100, 30 hello.show( Kontrolle an QApplication übergeben Jedes Programm hat genau eine Instanz von QApplication Erzeuge Button, 0=kein Elternfenster Größe in Pixel Button darstellen! 7 Tatsächlich: Klasse QPushButton bemerkt die Aktion, wurde aber nicht instruiert, was sie dann machen soll! Möglich: Eine Aktion in einem Objekt einer anderen Klasse auslösen. Klasse QObject static bool connect( const QObject *sender, // Wer sendet? const char *signal, // Bei welcher Aktion? const QObject *receiver, // Wer empfängt? const char *member, // Welche Aktion ausführen? Qt::ConnectionType type = Qt::AutoCompatConnection 8 2

Button ( Schaltfläche ) mit Text Hello World!, Programmende sobald gedrückt Signals and Slots Qt-spezifisch! QPushButton hello("hello world!" QObject::connect(&hello, SIGNAL(clicked()), &app, SLOT(quit()) hello.resize(100, 30 hello.show( Wenn hello angeklickt wird, dann soll in app die Methode quit ausgeführt werden. Bereitstellung von Inter-Objekt Kommunikation Idee: Objekte, die nichts voneinander wissen, können miteinander verbunden werden Jede von QObject abgeleitete Klasse kann Signals deklarieren, die von Funktionen der Klasse ausgestoßen werden Jede von QObject abgeleitete Klasse kann Slots definieren. Slots sind Funktionen, die mit Signals assoziiert werden können. Technisch Umsetzung: Makro Q_OBJECT in Klassendeklaration Signals und Slots von Objektinstanzen können miteinander verbunden werden: Signal S von Objekt A verbunden mit Slot T von Objekt B Wenn A Signal S ausstößt, so wird Slot T von B ausgeführt. 9 10 Signals and Slots Qt-spezifisch! Button als Teil eines Fensters Ein Signal kann mit mehreren Slots verbunden werden. Ein Ereignis löst mehrere Aktionen aus. Ein Slot kann mit mehreren Signals verbunden werden. Verschiedene Ereignisse können gleiche Aktion auslösen. Signals können auch Parameter an die Slots übergeben. Parametrisierte Aktionen. Signals können mit Signals verbunden werden. Weitergabe / Übersetzung von Signalen. #include <QWidget.h> QWidget window; window.resize(200, 120 QPushButton hello("hello world!", &window QObject::connect(&hello, SIGNAL(clicked()), &app, SLOT(quit()) hello.setgeometry(10, 40, 180, 40 window.show( hello ist Teil von window 11 12 3

Button und Label als Teile eines Fensters #include <QLabel.h> #include <QWidget.h> QWidget window; window.resize(200, 120 QLabel hello("hello world!", &window QPushButton quit("quit", &window QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()) hello.setgeometry(10, 10, 180, 40 quit.setgeometry(10, 60, 180, 40 window.show( QLabel zum Beschriften des Fensterinneren 13 Slider verbunden mit SpinBox #include <QSlider.h> #include <QSpinBox.h> #include <QWidget.h> QWidget window; window.resize(200, 120 QSpinBox spinbox(&window spinbox.setgeometry(10, 10, 180, 40 spinbox.setrange(0, 130 QSlider slider(qt::horizontal, &window slider.setgeometry(10, 60, 180, 40 slider.setrange(0, 130 Fortsetzung nächste Folie 42 Gewünschtes Verhalten: SpinBox wirkt auf Slider und umgekehrt. 14 Slider verbunden mit SpinBox QObject::connect(&spinBox, SIGNAL(valueChanged(int)), &slider, SLOT(setValue(int)) QObject::connect(&slider, SIGNAL(valueChanged(int)), &spinbox, SLOT(setValue(int)) spinbox.setvalue(42 window.show( Fortsetzung Anwendung: Temperaturumrechnung [ C] [ F] Lösung ohne GUI: 1. Einlesen einer Zahl 2. Angabe der Konvertierungrichtung 3. Ausgabe [ F] [ C] 15 16 4

Lösung ohne GUI #include <iostream> #include <cstring> using namespace std; if (argc!= 3 strlen(argv[1])!= 2 argv[1][0]!= '- (argv[1][1]!= 'C' && argv[1][1]!= 'F')) { cerr << "usage: " << argv[0] << " -(C F) value\n"; exit(1 double val = atof(argv[2] if (argv[1][1] == 'C') val = 5 * (val - 32) / 9; else val = 9 * val / 5 + 32; cout << val << " " << argv[1][1] << endl; return 0; 17 Lösung mit GUI QLabel C: 30 F: 86 C -> F QPushButton QLineEdit F -> C quit 18 #include "Converter.h" Converter conv(&app conv.show( So wird die GUI aussehen! #include <QObject.h> #include <QDialog.h> #include <QLineEdit.h> #include <QLabel.h> class Converter : public QDialog { Q_OBJECT private: QApplication *theapp; QPushButton *quit, *f2c, *c2f; QLineEdit *editc, *editf; QLabel *labelc, *labelf; public: Converter(QApplication *app ~Converter( public slots: void slotf2c( void slotc2f( ; Was ist das? Erst Aufruf von moc (meta object compiler), der generiert zusätzlichen C++ Code, dann Aufruf des C++ Compilers! Spracherweiterung? 19 20 5

#include <QMessageBox.h> #include "Converter.h" Converter::Converter(QApplication *app) : theapp(app) { quit = new QPushButton("quit", this f2c = new QPushButton("F -> C", this c2f = new QPushButton("C -> F", this editc = new QLineEdit(this editf = new QLineEdit(this labelf = new QLabel("F", this labelc = new QLabel("C", this setwindowtitle("converter" resize(340, 220 editc->setgeometry( 40, 20, 80, 40 editf->setgeometry( 220, 20, 80, 40 c2f->setgeometry( 40, 80, 80, 40 f2c->setgeometry( 220, 80, 80, 40 quit->setgeometry( 220, 160, 80, 40 labelc->setgeometry( 10, 20, 20, 40 labelf->setgeometry(190, 20, 20, 40 GUI Objekte anlegen GUI Objekte positionieren QWidget::connect(quit, SIGNAL(clicked()), app, SLOT(quit()) QWidget::connect(c2f, SIGNAL(clicked()), this, SLOT(slotC2F()) QWidget::connect(f2c, SIGNAL(clicked()), this, SLOT(slotF2C()) Converter::~Converter() { delete quit; delete f2c; delete c2f; delete editc; delete editf; delete labelc; delete labelf; GUI Objekte freigeben Kommunikation zwischen GUI Objekte einrichten 21 22 void Converter::slotC2F() { editc->selectall( QString s = editc->selectedtext( bool ok; double val = s.todouble(&ok if (!ok) QMessageBox::information( this, "invalid input", "please enter numbers" val = 9 * val / 5 + 32; editf->settext(qstring("%1").arg(val, 0, 'f', 1) void Converter::slotF2C() { editf->selectall( QString s = editf->selectedtext( bool ok; double val = s.todouble(&ok if (!ok) QMessageBox::information( this, "invalid input", "please enter numbers" val = 5 * (val - 32) / 9; editc->settext(qstring("%1").arg(val, 0, 'f', 1) Fehlerbehandlung unschön Ausnahmen wären eleganter! 23 6