Einführung in Qt Empfohlene Version 4 Empfohlene Pakete: qt4-default

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Klassen - Verkettete Liste -
Objektorientierte Programmierung
Ein- und Ausgabe von Dateien
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Dynamische Datentypen
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Dateien. Eine Datei wird in C++ als ein Stream, also als ein Objekt einer bestimmten Klasse dargestellt.
Ein Beispiel in Java.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Abstrakter Datentyp in C++ I - Klasse -
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Command Pattern Karola Schäuble,
Der C-Präprozessor EDV1 - 04Präprozessor.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
Der C-Präprozessor 08-CPräprozessor.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Java und Eclipse.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
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.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Informatik 1 Letzte Übung.
Aufruf einer Methode eines Objektes vom Typ „Bruch“
EPROG Tutorium #3 Philipp Effenberger
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
early binding (frühe Bindung) late binding (späte Bindung)
Einführung in die Programmierung
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
C++ FÜR cOMPUTERSPIELENTWICKLER
4. Graphische Oberflächen mit Qt-Framework. Was ist Qt? ● gesprochen englisch cute = hübsch ● C++-Klassenbibliothek ● Erweitert C++ um zusätzliche Features.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Klassen und Objekte.
Dynamischer Speicher malloc wird in c++ eher nicht mehr verwendet.
IOStreamLibrary.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Graphische Benutzeroberfläche mit libforms
Hello World! Javakurs 2013 Arne Kappen
Wxwidgets Toolkit/Library zur Realisierung graphischer Benutzeroberflächen Portabel Winows, MAC OS, Linux Open Source Designwerkzeug: wxformbuilder Homepage:
Arguments to main() int main(int argc, char *argv[]) { int i;
Die Klasse Vielfrass in Java
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Friends C++ ermöglicht, einzelne Funktionen oder ganze Klassen zu friends zu erklären. Friendfunktionen haben Zugang zu den privaten Daten einer Klasse.
IOStreamLibrary.
Einführung in die Programmierung
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
«Delegierter» Methoden Schablone Funktionszeiger
Implementieren von Klassen
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

Einführung in Qt Empfohlene Version 4 Empfohlene Pakete: qt4-default qt4-doc-html Werkzeuge: designer (Designtool) qtcreator (Ide) qmake

Einführung in Qt Empfohlene Version 4 Empfohlene Pakete: qt4-default qt4-doc-html Werkzeuge: designer (Designtool) qtcreator (Ide) qmake

Einführung in Qt Beispiel 1 #include <QApplication> #include <QPushButton> int main( int argc, char **argv ) { QApplication a( argc, argv ); QPushButton hello( "Hello world!", 0 ); hello.resize( 100, 30 ); hello.show(); return a.exec(); } Parent Widget Hier null, weil Hauptfenster

Einführung in Qt Verzeichnis anlegen Quelltext erfassen und speichern (xxx.cpp) Buildschritte: qmake -project qmake make Qmake ist nach Änderung von Quellfilenamen oder Hinzufügen von Quellfiles auszuführen. Make nach jeder gespeicherten Änderung des Quelltextes.

Einführung in Qt Ein Objekt QApplication beschreibt die gesamte Applikation. Ein Objekt QPushButton beschreibt einen Button Der Button wird hier zum MainWindow. QPushButton->QAbstractButton->QWidget show - Methode von Qwidget Der Button führt zu keiner Aktion, wenn er angecklickt wird Eine Beschreibung aller Klassen ist zu finden unter: file:///usr/share/qt4/doc/html/qapplication.html

Einführung in Qt Beispiel 2 #include <QApplication> #include <QPushButton> int main( int argc, char **argv ) { QApplication a( argc, argv ); QPushButton quit( "Quit",0 ); quit.resize( 150, 45 ); quit.setFont( QFont( "Times", 24, QFont::Bold ) ); QObject::connect(&quit,SIGNAL(clicked()),&a, SLOT(quit())); quit.show(); return a.exec(); } Hier wird die Funktionalität ergänzt

Einführung in Qt Signals and Slots Eine Komponente (Qwidget) wird mit einer Funktionalität verbunden. Qobject::connect // Funktion, die Widgets ( // mit Funktion verbindet &quit, // Widget mit dem etwas passiert SIGNAL(clicked()), // Welches Signal wird ausgewertet &a, // Welches Objekt ist zuständig SLOT(quit()) // Was soll passieren );

Einführung in Qt Beispiel 3 #include <QApplication> #include <QPushButton> int main( int argc, char **argv ) { QApplication a( argc, argv ); QWidget w; w.resize( 200, 120 ); QPushButton quit( "Quit", &w ); quit.move( 62, 40 ); quit.resize( 75, 30 ); quit.setFont(QFont("Helvetica",24,QFont::Normal ) ); QObject::connect(&quit,SIGNAL(clicked()),&a, SLOT(quit())); w.show(); return a.exec(); } Das neue Hauptwidget

Einführung in Qt QWidget w erzeugt ein den Button umgebendes Window w wird ist MainWidget QPushButton erhält bei der Erzeugung w als Parentwindow QPushButton quit ist das ChildWindow von w move ist eine überschriebene Funktion von QWidget in QPushButton und bestimmt die Position des Buttons, resize bestimmt die Größe des Buttons

Es ergibt sich nun eine Qbjekthierarchie Einführung in Qt Es ergibt sich nun eine Qbjekthierarchie QApplication verwendet QWidget Parent verwendet QPushButton

Einführung in Qt Einteilung in mehrere Quellfiles Main.cpp Headerfile mit Klassenvereinbarung Implementationsfile dazu Mit Vererbung baut man sich eigene Widgets

Einführung in Qt Beispiel 4 // Qt4Main.cpp #include <QApplication> #include <QWidget> #include <QPushButton> #include "qt4.h" int main( int argc, char **argv ) { QApplication a( argc, argv ); MyWidget w; w.setGeometry( 100, 100, 200, 120 ); w.show(); return a.exec(); } MyWidget: Durch Vererbung spezialisiertes Widget

Einführung in Qt Beispiel 4 // qt4.h #ifndef __QT4__H__ #define __QT4__H__ class MyWidget : public QWidget { public: MyWidget( QWidget *parent=0); }; #endif

Einführung in Qt Beispiel 4 // qt4.cpp #include <QWidget> #include <QPushButton> #include <QCoreApplication> #include "qt4.h" MyWidget::MyWidget( QWidget *parent): QWidget( parent ) { setMinimumSize( 200, 120 ); setMaximumSize( 400, 240 ); QPushButton *quit = new QPushButton( "Quit", this); quit->setGeometry( 62, 40, 75, 30 ); quit->setFont( QFont( "Times", 18, QFont::Bold ) ); connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) ); }

Einführung in Qt In Beispiel 5 werden zwei Widgets miteinander verknüft. Über Signals und Slots tauschen Widgets Informationen aus. Der Main-Modul bleibt dabei unverändert. Unser Widget soll drei Widgets beinhalten: den Quit PushButton (QPushButton) einen Scrollbar (QScrollBar) Ein LCD -Zahlendisplay (QLCDNumber)

Einführung in Qt Beispiel 5 #include <QApplication> #include <QWidget> #include <QPushButton> #include <QScrollBar> #include <QLCDNumber> #include <QCoreApplication> #include "qt5.h" int main( int argc, char **argv ) { QApplication a( argc, argv ); MyWidget w; w.setGeometry( 100, 100, 200, 200 ); w.show(); return a.exec(); }

Einführung in Qt Beispiel 5 #ifndef __QT5__H__ #define __QT5__H__ class MyWidget : public QWidget { public: MyWidget( QWidget *parent=0); protected: void resizeEvent( QResizeEvent * ); private: QPushButton *quit; QScrollBar *sBar; QLCDNumber *lcd; }; #endif

Einführung in Qt Beispiel 5 this->width() #include <QApplication> #include <QWidget> #include <QPushButton> #include <QScrollBar> #include <QLCDNumber> #include <QCoreApplication> #include "qt5.h" void MyWidget::resizeEvent( QResizeEvent * ) { sBar->setGeometry( 10, height()-10-16,width()-20, 16 ); lcd->resize( sBar->width(), sBar->y() - lcd->y() - 5 ); }

Einführung in Qt Beispiel 5 MyWidget::MyWidget( QWidget *parent) : QWidget( parent ) { setMinimumSize( 200, 200 ); quit = new QPushButton( "Quit", this); quit->setGeometry( 10, 10, 75, 30 ); quit->setFont( QFont( "Times", 18, QFont::Bold ) ); connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) ); lcd = new QLCDNumber( 3, this); lcd->move( 10, quit->y() + quit->height() + 10 ); sBar = new QScrollBar( Qt::Horizontal, // orientation this); // parent, name sBar->setMinimum(0); sBar->setMaximum(120); connect(sBar,SIGNAL(valueChanged(int)), lcd ,SLOT(display(int)) ); }

Einführung in Qt Die Schritte im Einzelnen: Erzeugen der Widgets Eigenschaften einstellen Verbinden via Signals und Slots Dokumentation zu den einzelnen Funktionen dazu ist zu finden unter file:///usr/share/qt4/doc/html/classes.html

Einführung in Qt Eventhandling Eventhandling erfolgt nach zwei Strategien: Überschriebene Eventfunktionen – wenn das Ereignis eintritt, wird die, ggf überschriebene Funktion ausgeführt (resizeEvent) Signals/Slots – hier wird ein Observerpattern implementiert. Das Eintreten eines Ereignisses (Signal) wird einem Objekt mitgeteilt in dem die entsprechende Funktion (Slot) aufgerufen wird.

Einführung in Qt Beispiel 6 Fileviewer #include <QObject> #include <QApplication> #include <QWidget> #include <QPushButton> #include <QCoreApplication> #include <QMenuBar> #include <QMenu> #include <QFileDialog> #include <QTextEdit> #include <QString> #include <QResizeEvent> #include "fv.h" Das Main File int main( int argc, char **argv ) { QApplication a( argc, argv ); myWidget w(argv[1]); w.show(); return a.exec(); }

Einführung in Qt Beispiel 6 Fileviewer #include <QObject> #include <QApplication> #include <QWidget> #include <QPushButton> #include <QCoreApplication> #include <QMenuBar> #include <QMenu> #include <QFileDialog> #include <QTextEdit> #include <QString> #include <QResizeEvent> Hier includes einfügen! #ifndef _H_FV #define _H_FV class myWidget : public QWidget { Q_OBJECT public: myWidget(const char* file, QWidget *parent=0); virtual ~myWidget(){} protected: void resizeEvent( QResizeEvent * ); private: QMenuBar * MenuBar; QTextEdit* MLE; // MultiLineEdit public slots: void open (); }; #endif

Einführung in Qt Beispiel 6 Fileviewer myWidget::myWidget(const char* file, QWidget *parent) :QWidget(parent) { setMinimumSize(200,150); MenuBar=new QMenuBar(); QMenu *File=MenuBar->addMenu("File"); File->addAction("&Open",this,SLOT(open())); File->addAction("&Quit",qApp,SLOT(quit())); MLE=new QTextEdit(); MLE->setMinimumSize(180,100); MLE->setFont(QFont( "Helvetica", 12, QFont::Normal )); MLE->setReadOnly ( FALSE ); QVBoxLayout *vbox=new QVBoxLayout; setLayout(vbox); vbox->addWidget(MenuBar); vbox->addWidget(MLE); #include <QObject> #include <QApplication> #include <QWidget> #include <QPushButton> #include <QCoreApplication> #include <QMenuBar> #include <QMenu> #include <QFileDialog> #include <QTextEdit> #include <QString> #include <QVBoxLayout> #include <QResizeEvent> #include "fv.h" #include <iostream> #include <fstream> using namespace std;

Einführung in Qt Hier erfolgt die Verknüpung der Widgets anders. VboxLayout erhält die von ihm evrwalteten Widgets über this->setLayout(vbox); vbox->addWidget(MenuBar); vbox->addWidget(MLE);

Einführung in Qt Beispiel 6 Fileviewer /* Fortsetzung des Quelltextes */ ifstream is(file ); if (is) { char vBuf[1024]; MLE->clear(); while(NULL!=is.getline(vBuf,1024)) MLE->append(vBuf); } else MLE->append("NIXda"); void myWidget::resizeEvent( QResizeEvent * E) // width und height sind Member von QWidget MLE->setGeometry(5,45,width()-10,height()-50);

Einführung in Qt Beispiel 6 Fileviewer void myWidget::open() { QString FileName=QFileDialog::getOpenFileName(); if ( !FileName.isEmpty() ) ifstream is(FileName.toLatin1().constData()); if (is) char vBuf[1024]; MLE->clear(); while(NULL!=is.getline(vBuf,1024)) MLE->append(vBuf); } else MLE->append("Datei existiert nicht"); show(); Konvertierung von Qstring nach const char*

Einführung in Qt Größere Projekte werden sinnvollerweise mit einer unterstützenden ide realisiert qtcreator bietet sich hier an Gute Tutorials dazu unter: https://de.wikibooks.org/wiki/Qt_f%C3%BCr_C%2B%2B-Anf%C3%A4nger http://www.eyeshadowpictures.de/main/qt4-02-tabelle.php