Anzeige:

Umfrageergebnis anzeigen: QT Tutorial: Lektion 2

Teilnehmer
3. Du darfst bei dieser Umfrage nicht abstimmen
  • ja, passt so

    3 100,00%
  • nein, passt so nicht

    0 0%
  • ich hab eine viel besser Lektion 2

    0 0%
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 20

Thema: Qt Tutorial: Lektion 2

  1. #1
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Qt Tutorial: Lektion 2

    Lektion 2

    Autor: anda_skoa

    Der Button aus Lektion 1 hat noch keine Funktion.
    Es wäre doch fein, wenn ein Klick auf den Button das Fenster schliessen
    würde.

    Das geht ganz leicht, mit nur einem weiteren Befehl:

    Code:
    #include <qapplication.h>
    #include <qpushbutton.h>
    
    int main( int argc, char* argv[] )
    {
    
        QApplication app( argc, argv );
    
        QPushButton  helloworld( "Hello World", 0 );
        helloworld.resize( 100,30 );
    
        app.setMainWidget( &helloworld );
    
        QObject::connect(&helloworld, SIGNAL(clicked()), &app, SLOT(quit()));
    
        helloworld.show();
    
        return app.exec();
    }
    Betrachten wir die zusätzliche Zeile:

    Code:
    QObject::connect(&helloworld, SIGNAL(clicked()), &app, SLOT(quit()));
    Wir sehen im wesentlichen zwei Sachen:
    a) den Aufruf der offensichtlich statische Methode connect der Klasse
    QObject
    b) die Anwendung von zwei Makros: SIGNAL und SLOT

    QObject ist die Basis
    aller Klassen, die in Qt an Events beteilgt sind.

    In der Sektion "Static Public Members" finden wir auch die oben benutze
    Funktion:
    Code:
    bool connect ( const QObject * sender, const char * signal, const QObject *
    receiver, const char * member )
    Was macht nun diese Methode?

    Sie verbindet ein Signal eines Senderobjektes mit einem Slot eines
    Empfängerobjektes.

    Signale und Slots sind eine Eigenheit von Qt.
    Sie erlauben das verbinden zwei Objekten, ohne dass sich die beiden Partner
    kennen müssen.
    Nur der Verbinder muss beide kennen.

    Signal und Slots sind eine Art lokales Event.

    Jede QObject Subklasse kann Signale aussenden und Signale empfangen.
    Wenn ein Signal nicht verbunden ist, verpufft es einfach.

    Ein Signal kann mit mehreren Slots verbunden sein.
    In diesem Fall werden alle Slots in zufälliger Reihenfolge aktiviert, also
    ausgeführt.

    In unserem Beispiel verknüpfen wir das Signal clicked() des QPushButtons mit
    dem Slot quit() der QApplication Instanz.
    Signale und Slots befinden sich in der Qt Dokumentation immer in eigene
    Sektionen der jeweiligen Klassen.

    clicked() ist in dem Fall nicht direkt in QPushButton sondern bereits in der
    Basisklasse QButton deklariert.

    Wie die leere Klammer andeutet, hat das Signal clicked() keinen
    Parameter, transportiert also keine Daten.
    Darum können wir es nur mit einem Slot verbinden, der keinen Parameter
    erwartet.
    Glücklicherweise ist quit() genau so ein Slot.

    Die Parameter von Signal und Slot müssen immer in ihrem Typ übereinstimmen.
    Das wird allerdings erst zur Laufzeit überprüft, der Compiler meldet also
    keinen etwaigen Fehler. So etwas sieht man dann auf der Konsole, von der aus
    das Programm gestarte wurde.

    Dieser Effekt kann leicht demonstiert werden, wenn man clicked()
    gegen toggled(bool) austauscht.

    Unsere Programmzeile würde in diesem Fall so aussehen:
    Code:
    QObject::connect(&helloworld, SIGNAL(toggled(bool)), &app, SLOT(quit()));
    Kompilierung

    Die Kompilierung erfolgt wie in der ersten Lektion:

    #> g++ -o lektion2 lektion2.cpp -Wall -I/usr/lib/qt-3.0.3/include -L/usr/lib/qt-3.0.3/lib -lqt-mt
    Wenn das Programm nun ausgeführt wird, wird bei einem Klick auf den Button
    das Programm beendet.
    Durch den Klick sendet der Button sein clicked() Signal aus.
    Anders als in Lektion 1 ist dieses Signal nun mit quit() der
    QApplication verdunden. Darum wird von Qt diese Methode ausgeführt, was die
    QApplication dazuveranlasst, sich zu beenden.

    Experimente

    Die Parameter von Signal und Slot müssen immer in ihrem Typ übereinstimmen.
    Das wird allerdings erst zur Laufzeit überprüft, der Compiler meldet also
    keinen etwaigen Fehler. So etwas sieht man dann auf der Konsole, von der aus
    das Programm gestarte wurde.

    Dieser Effekt kann leicht demonstiert werden, wenn man clicked()
    gegen toggled(bool) austauscht.

    Unsere Programmzeile würde in diesem Fall so aussehen:
    Code:
    QObject::connect(&helloworld, SIGNAL(toggled(bool)), &app, SLOT(quit()));
    Bitte wieder abstimmen und kommentieren.

    Danke,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  2. #2
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    nice!

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.02.2003
    Ort
    Raum Heilbronn
    Beiträge
    15
    Hallo zusammen,

    wieder was dazu gelernt - prima.
    Schlage vor den Lektionen noch eine passende Überschrift zu geben.
    Habt ihr eigentlich vor auf eine bestimmte IDE zuzuarbeiten?
    Oder favoritisiert ihr den Editor als Tool zum Erstellen des Quellkodes?
    Ich würde das MVC-Konzept
    (vgl. http://www.hosengummi.de/beispiel/fuenf_schritte.html)
    als Ziel anpeilen. Damit kann man auch größere Anwendungen aus einer kleinen
    heraus entwickeln.
    Gruß ufg

  4. #4
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    link zu QButton ist deadlink... ich glaube nich das du einen lokalen link wolltest oder?

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von ufg
    wieder was dazu gelernt - prima.
    Hört man gerne


    Schlage vor den Lektionen noch eine passende Überschrift zu geben.
    Gute Idee!
    Irgendwelche Vorschläge?


    Habt ihr eigentlich vor auf eine bestimmte IDE zuzuarbeiten?
    Oder favoritisiert ihr den Editor als Tool zum Erstellen des Quellkodes?
    Für das Grundlagen Tutorial sollten wir meiner Meinung nach möglichst ohne IDE arbeiten. Wer will kann ja eine benutzen, aber wenn wir eine vorgeben würden, dann würde das den Anwenderkreis einschränken.


    Ich würde das MVC-Konzept
    (vgl. http://www.hosengummi.de/beispiel/fuenf_schritte.html)
    als Ziel anpeilen. Damit kann man auch größere Anwendungen aus einer kleinen
    heraus entwickeln.
    Das wäre eventuell etwas für ein Fortgeschrittenen Tutorial.
    Dieses soll die Grundlagen der Qt basierten Entwicklung enthalten, unabhäng vom Applikationsdesign.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von tuxipuxi
    link zu QButton ist deadlink... ich glaube nich das du einen lokalen link wolltest oder?
    Mist, aus dem falschen Browserfenster kopiert

    Danke für den Hinweis, gefixt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    02.02.2003
    Ort
    Raum Heilbronn
    Beiträge
    15
    Hallo,

    ---8<----------------
    > Für das Grundlagen Tutorial sollten wir meiner Meinung nach möglichst ohne IDE
    > arbeiten. Wer will kann ja eine benutzen, aber wenn wir eine vorgeben würden,
    > dann würde das den Anwenderkreis einschränken.

    oder vielleicht Linux-C++-Interessierte von VB, Borland, M$ weglocken...

    Gruß ufg

  8. #8
    Registrierter Benutzer
    Registriert seit
    02.02.2003
    Ort
    Raum Heilbronn
    Beiträge
    15
    >> Schlage vor den Lektionen noch eine passende Überschrift zu geben.

    > Gute Idee!
    > Irgendwelche Vorschläge?

    Lektion 1: "Hello World" als Knopf
    Lektion 2: Knopf mit Leben füllen

    Gruß ufg

  9. #9
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Hab ich schon erwähnt, dass ich bei dem Wort "Knopf" k**zen muss?
    Das erinnert mich so an SAP...
    Mach aus Knopf Button, dann find ich´s gut.


  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von Gaert
    Hab ich schon erwähnt, dass ich bei dem Wort "Knopf" k**zen muss?
    Das erinnert mich so an SAP...
    Mach aus Knopf Button, dann find ich´s gut.
    Keine Angst, ich benutze sicher nicht Knopf.

    Jedes mal wenn ich das Lese muss ich ein paarmal drüber Lesen und Nachdenken, was denn damit gemeint ist.

    Aber er Vorschlag mit "Hello World" ist gut.
    Lektion 1: Qt Version von "Hello World"

    Lektion 2: Einfaches Eventhandling
    oder
    Lektion 2: Reagieren auf Buttonklick

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von ufg
    Hallo,

    ---8<----------------
    > Für das Grundlagen Tutorial sollten wir meiner Meinung nach möglichst ohne IDE
    > arbeiten. Wer will kann ja eine benutzen, aber wenn wir eine vorgeben würden,
    > dann würde das den Anwenderkreis einschränken.

    oder vielleicht Linux-C++-Interessierte von VB, Borland, M$ weglocken...
    Du meinst als Vorteil von IDE als Basis benutzen?

    Hmm, ja, da könntest du schon recht haben, aber meiner Meinung nach ist das komplizierter, weil man entweder ein Projekt erstellen muss, oder die IDE ohnehin nur als Editor einsetzt.

    Außerdem ist es mit Hilfe von qmake wirklich nicht schwer, Makefiles zu generieren und man lässt den Leuten dann freie Wahl des Editors.

    Im Falle eines KDE Tutorials würde ich schon auf KDevelop zurüpckgreifen, weil dann der praktische Teil des generierten Frameworks überwiegt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    >Ein Signal kann mit mehrern Slots verbunden sein.
    mit mehreren

    Das Tutorial gefällt mir von Schreibstil her sehr gut, nur die Erklärung, was Signals&Slots sind, ist etwas verwirrend

  13. #13
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von axeljaeger
    >Ein Signal kann mit mehrern Slots verbunden sein.
    mit mehreren
    Thx, gefixt.


    Das Tutorial gefällt mir von Schreibstil her sehr gut, nur die Erklärung, was Signals&Slots sind, ist etwas verwirrend
    Hmm, ist ein schwierigereres Thema. Irgendwelche alternativen Textpassagen?
    Soll ich was rausnehmen, oder ergänzen?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  14. #14
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Der Begriff Event ist mehrdeutig: Es gibt in Qt QEvents, die Möglichkeit virtuelles zu überschreiben, um QEvents zu erhalten und Signals&Slots, die einem das Vererben eigentlich ersparen sollen.

  15. #15
    Registrierter Benutzer
    Registriert seit
    02.02.2003
    Ort
    Raum Heilbronn
    Beiträge
    15
    Hallo,
    ---8<----------------
    > > Für das Grundlagen Tutorial sollten wir meiner Meinung nach möglichst ohne IDE
    > > arbeiten. Wer will kann ja eine benutzen, aber wenn wir eine vorgeben würden,
    > > dann würde das den Anwenderkreis einschränken.

    > oder vielleicht Linux-C++-Interessierte von VB, Borland, M$ weglocken...
    > Original geschrieben von anda_skoa
    > Du meinst als Vorteil von IDE als Basis benutzen?
    Ich meine den Motivationsschub nutzen den die IDE bringt!

    > Hmm, ja, da könntest du schon recht haben, aber meiner Meinung nach ist das
    > komplizierter, weil man entweder ein Projekt erstellen muss,
    na und...
    > oder die IDE ohnehin nur als Editor einsetzt.
    na und...
    Aber ich denke mehr an Programmieranfänger und die sind Klick-verseucht.
    Die Konsole ist für die das was die Schlange für das Kaninchen ist.
    Also was zum Abgewöhnen.

    Es gibt noch einen Grund die Erstellung mit einem Editor abzulehnen.
    Es würde mich aber deine Meinung dazu wirklich interessieren:
    Die beiden Lektionen zeigen sehr gut wie man mit Qt programmieren kann.
    Aber es ist ein Programmierstil mit dem man keine größeren Programme erstellen kann.
    Schreibt man mit dem Editor größere Programme muß man das Programm auf
    mehrere Dateien aufteilen. Und das wird dann kompliziert. Da ist dann eine IDE
    zweckmäßiger.
    Aber wie gesagt: Es würde mich deine Meinung dazu wirklich interessieren da
    ich qmake nicht kenne.
    Gruß ufg

    > Außerdem ist es mit Hilfe von qmake wirklich nicht schwer, Makefiles zu
    > generieren und man lässt den Leuten dann freie Wahl des Editors.
    qmake kenne ich nicht; benutze halt KDevelop (-:

    > Im Falle eines KDE Tutorials würde ich schon auf KDevelop zurüpckgreifen, weil
    > dann der praktische Teil des generierten Frameworks überwiegt.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •