Anzeige:

Umfrageergebnis anzeigen: Qt Tutorial Lektion1

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

    6 100,00%
  • nein, passt so nicht

    0 0%
  • hab was viel besseres

    0 0%
Ergebnis 1 bis 12 von 12

Thema: Qt Tutorial: Lektion1

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

    Qt Tutorial: Lektion1

    Dies ist mal der Entwurf für Lektion1 unseres Qt Tutorials.
    Basis bildet der Vorschlag von tuxipuxi.

    Lektion1

    Autoren: tuxipuxi, anda_skoa

    Beipieldatei: lektion1.cpp

    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 );
    
        helloworld.show();
    
        return app.exec();
    
    }
    Nun betrachten wir das Programm Zeile für Zeile:

    Code:
    #include <qapplication.h>
    Dieser Header deklariert die Klasse QApplication.
    Eine Instanz der Klasse QApplication wird benötigt, wenn das Programm das Eventhandling von
    Qt benutzen möchte.
    Events benötigt man wenn man
    a) Widgets benutzt, d.h. wenn man eine GUI machen möchte
    b) Sockets benutzt, d.h. wenn man Netzwerkkommunikation machen möchte
    c) QProcess benutzt, d.h. wenn man andere Programme als Kindprozesse starten möchte

    In diesem Fall trifft (a) zu.

    Code:
    #include <qpushbutton.h>
    Dieser Header deklariert die Klasse QPushButton.
    Ein QPushButton ist ein klassischer Button.

    Code:
    int main( int argc, char *argv[] )
    Beginn der normalen main Funktion eines C++ Programms.

    Code:
    QApplication app( argc, argv );
    Wir erzeugen unsere QApplication Instanz und verwenden als Parameter die Kommandozeilen Argumente
    des Programms.
    Qt definiert ein paar mögliche Argumente und benutzt sie, wenn sie in argv enthalten sind.
    Die verbleibenden Argumente verhält man über die Methoden argc() bzw. argv() der QApplication Instanz.

    Code:
    QPushButton  helloworld( "Hello World", 0 );
    Dies erzeugt einen QPushButton, dessen Eigenschaften wir mit Hilfe seiner Methoden ändern können.
    Das erste Argument gibt den Text an, der im QPushButton stehen soll, der zweite das Parent Widget.
    Das Parent Widget ist das GUI Element, in dem das neue Widget enthalten sein soll.
    Hier ist der Parent 0, d.h. der Button ist hat keinen Parent.

    Hat ein QObject (das gilt nicht nur für QWidgets) ein Parent QObject, dann wird der Parent alle seine
    Kindobjekte löschen, wenn er selbst gelöscht wird.
    Das ist vorallem bei Widgets praktisch, weil man nicht alle Elemente eines Fenster einzeln löschen muss,
    sondern es reicht, das Fenster zu löschen.

    Code:
    helloworld.resize( 100,30 );
    Die Methode resize eine QWidget ändert seine Größe. Die Parameter sind die Breite (width) und die Höhe (height).
    Der Button wird also auf 100 Pixel Breite und 30 Pixel Höhe gesetzt.

    Code:
    app.setMainWidget( &helloworld );
    Setzt unseren QPushButton helloworld als MainWidget der Applikation. Normalerweise hat jede Qt GUI-Applikation ein MainWidget.
    Wird dieses geschlossen, beendet sich auch die QApplication.

    Code:
    helloworld.show();
    Ein Widget ist nach seiner Erzeugung nicht automatisch sichtbar.
    Es muss erst die Methode show aufgerufen werden.
    Widgets die eine Parent haben, werden sichtbar, wenn der Parent sichtbar wird, außer der Parent
    war bei Erzeugung des Kindwidgets bereits sichtbar.

    Code:
    return app.exec();
    Hier übergeben wir der Qt-Application ( app ) das Kommando.
    Sobald diese beendet wird, liefert app einen Rückgabewert und die main Funktion wird ebenfalls beendet.


    Kompilierung:

    Um diese Datei zu kompilieren, braucht man ein paar Argumente für den C++ Compiler.
    Da wir Qt Headerdateien verwenden, brauchen wir den Pfad an dem sie liegen.
    Da wir anschliessend mit der Qt Bibliothek linken wollen, brauchen wir auch den Pfad der Bibliothek.

    Um die beiden Pfad zu erhalten, rufen wir locate auf

    #> locate qapplication.h
    /usr/lib/qt-3.0.3/include/qapplication.h
    /usr/share/doc/qt-devel-3.0.3/html/qapplication.html
    Das zweite ist der Pfad der Dokumentation, aber den brauchen wir nicht.
    Unsere Qt Header sind hier also in /usr/lib/qt-3.0.3/include

    #> locate libqt
    /usr/lib/qt-3.0.3/lib/libqt-mt.so.3
    /usr/lib/qt-3.0.3/lib/libqt-mt.so.3.0
    /usr/lib/qt-3.0.3/lib/libqt-mt.so.3.0.3
    /usr/lib/qt-3.0.3/lib/libqt.so.3
    /usr/lib/qt-3.0.3/lib/libqt.so.3.0
    /usr/lib/qt-3.0.3/lib/libqt.so.3.0.3
    /usr/lib/qt-3.0.3/lib/libqt-mt.so
    /usr/lib/qt-3.0.3/lib/libqt.so
    Der Pfad zur Bibliothek ist also /usr/lib/qt-3.0.3/lib
    Die Qt Bibliothek liegt hier sowohl mit (libqt-mt.so) Thread Unterstützung vor, also auch ohne (libqt.so).
    Welche von beiden benutzt wird, ist für unser Beispiel nicht wichtig.

    (Die Pfade sind von System zu System unterschiedlich)

    Der Aufruf lautet nun wie folgt:
    #> g++ -o lektion1 lektion1.cpp -Wall -I/usr/lib/qt-3.0.3/include -L/usr/lib/qt-3.0.3/lib -lqt-mt
    Zur Erklärung:
    g++ : der C++ Compiler unter Linux.
    -o lektion1 : der Name, den das Programm haben soll
    lektion1.cpp : Unsere Quelltextdatei
    -Wall : aktiviert alle Warnung des Kompilers
    -I/usr/lib/qt-3.0.3/include: Angabe eines Pfades für Headerdateien
    -L/usr/lib/qt-3.0.3/lib : Angabe eines Pfaed für Bibliotheken
    -lqt-mt : die Bibliothek, mit der unser Programm gelinkt werden soll
    Der Aufruf mit der Qt ohne Threadunterstütztung unterscheidet sich nur in diesem letzten Argument: -lqt

    Treten beim Kompilieren und Linken keine Fehler auf, kann das Programm nun gestarte werden:
    #> ./lektion1
    Bitte voten und kommentieren.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  2. #2
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    ja ist besser als meine basis... nur die erklaerung mit ebents ist fuer lektion1 nicht angemessen.

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

    Re: Qt Tutorial: Lektion1

    Hallo zusammen,

    hier hat sich ein Fehlerteufelchen eingeschlichen:

    Hier übergeben wir der Qt-Application ( app ) das Kommando.
    Sobald diese beendet wird, liefert app einen Rpckgabewert <--da

    Gruß ufg

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

    Re: Re: Qt Tutorial: Lektion1

    Original geschrieben von ufg
    Hallo zusammen,

    hier hat sich ein Fehlerteufelchen eingeschlichen:

    Hier übergeben wir der Qt-Application ( app ) das Kommando.
    Sobald diese beendet wird, liefert app einen Rpckgabewert <--da
    Danke, hab ich behoben.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von tuxipuxi
    ja ist besser als meine basis... nur die erklaerung mit ebents ist fuer lektion1 nicht angemessen.
    Hmm, irgend eine bestimmte Passage?

    Ich kann einfach ned so abschätzen, was jemand brauchen könnte, wenn man grundlegendes C++ Wissen als gegeben nimmt.

    War ich zu speziell?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    hey,
    das ist super, wenn ihr weiterschreibt, dann bitte hier im Forum (am Besten News) einen Thread öffnen mit einem Link darauf!

    Markus

  7. #7
    Registrierter Benutzer
    Registriert seit
    21.08.2001
    Beiträge
    79
    Allererste Sahne würde ich sagen. Ich bin übrigens genau auf dem Kenntnisstand, wo man sowas brauchen kann und freue mich, dass sich jemand die Mühe macht und so ein Tutorial schreibt.

    Ein bisschen c++-Wissen ist da, aber nur Grundlagen. Mehr kann man bei einem qt-Anfänger, der dieses Tut liest, glaub ich, auch nicht erwarten, sonst würde er sich einfach die APIs nehmen und loslegen. Deswegen finde ich es auch passend, dass das Kompilieren genau beschrieben wurde. Und dass nicht gleich mit ner IDE angefangen wurde.

    Was soll denn in der nächsten Lektion drankommen? Was mich bei den vorhandenen Tutorials sehr stört, ist, dass nirgends beschrieben ist, wie ein Makefile funktioniert. Anscheinend wird hier angenommen, dass man es entweder eh von ner IDE generiert bekommt oder gar nicht benutzt. Ich bin aber der Meinung, dass man das auch mal lernen sollte, egal ob IDE oder nicht. Vielleicht könnt ihr diese Lücke ja stopfen.

    Ein Dankeschön und viele Grüße,
    Xare

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von msi
    hey,
    das ist super, wenn ihr weiterschreibt, dann bitte hier im Forum (am Besten News) einen Thread öffnen mit einem Link darauf!
    Sobald die erste Lektion fertig ist, also die Leute ihre Verbesserungen hier kund getan haben, werd ich ein FAQ Item oder sowas machen (muss mich da mit netzmeister unterhalten).
    Dort kommen dann die fertigen Lektionen rein.

    Wie gesagt, sobald die erste Lektion fertig ist, mach ich auch eine Ankündigung in News.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #9
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von xare
    Allererste Sahne würde ich sagen. Ich bin übrigens genau auf dem Kenntnisstand, wo man sowas brauchen kann und freue mich, dass sich jemand die Mühe macht und so ein Tutorial schreibt.

    Dann kannst du dich als offiziellen Test Developer betrachten
    Diese Lektion ist gerade in der Begutachtungsphase, also ist jede Art von Kritik jetzt am angebrachtesten.


    Und dass nicht gleich mit ner IDE angefangen wurde.
    Das ist für mich einer der Hauptpunkte.
    Man kann dann immer noch ein $IDE Tutorial machen.


    Was soll denn in der nächsten Lektion drankommen?
    Ich hab keinen genauen Zeitplan dafür. Mein Vorschlag für die nächste Lektion beinhaltet keine großen Änderungen, vielleicht mach ich das gleich morgen.
    Ich möchte aber allen Interessierten genug Zeit geben, sich diesen Entwurf anzusehen und eventuelle Verbesserungen/Kritiken einfliessen zu lassen.


    Was mich bei den vorhandenen Tutorials sehr stört, ist, dass nirgends beschrieben ist, wie ein Makefile funktioniert. Anscheinend wird hier angenommen, dass man es entweder eh von ner IDE generiert bekommt oder gar nicht benutzt. Ich bin aber der Meinung, dass man das auch mal lernen sollte, egal ob IDE oder nicht. Vielleicht könnt ihr diese Lücke ja stopfen.
    Schau mal hier http://www.mrunix.de/forums/showthre...threadid=31127

    Vorschlag für Lektion4 beinhaltet generieren eines passenden Makefile mit Hilfe von qmake.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  10. #10
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    >>> Das erste Argument gibt den Text a,n der im QPushButton stehen soll, der zweite das Parent Widget. <<<<

    da ist ein Komma zwischen dem "a" und dem "n" zu viel

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von axeljaeger
    >>> Das erste Argument gibt den Text a,n der im QPushButton stehen soll, der zweite das Parent Widget. <<<<

    da ist ein Komma zwischen dem "a" und dem "n" zu viel
    Thx, gefixt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Nachdem das Echo durchwegs positiv war, hab ich das Tutorial mit der ersten Lektion angelegt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

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