Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 27

Thema: Dynamische Schriften etc...

  1. #1
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749

    Dynamische Schriften etc...

    Hallo,
    ich habe eine GUI und diese wird für jedes widget mit setGeometry etc angelegt....
    Jetzt ist meine Frage....kann ich irgendwie einfach alles so implementieren dass auch bei sich ändernder Bildschirmauflösung und auch bei anderen Schriftgrößen alles so bleibt ........?

    Wie wird das gehandhabt ?

    Danke euch!

  2. #2
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226
    Hallo Mat,

    ja, das kannst du. Dazu benutzt man den Layoutmanager, indem man qlayout.h einbindet. Es gibt horizontale Layouts (QHBoxLayout), vertikale Layouts (QVBoxLayout) und Gitter (QGridLayout). Du kannst diese auch kombinieren, also mehrere horizontale anschließend in ein vertikales Layout stecken. Um Fenster einzufügen, benutzt du addWidget, für Layouts addLayout. Als parent gibst du allerdings immer das Fenster an, was darunter liegt, und nicht das Layout!

    Der Vorteil von den Layouts ist, dass Qt die Aufteilung des Fensters selber regelt, also auch wenn sich die Schriftgröße ändert etc. Jedes Fenster erhält so viel Platz, wie es braucht. Abstände zum Rand und zu anderen Fenstern kannst du allerdings selber einstellen. Man kann auch Spacer einfügen, wenn man nicht möchte, dass der gesamte Platz genutzt wird, oder einen Stretch, wenn der Abstand z.B. zwischen zwei Buttons mitwachsen soll, wenn das Hauptfenster seine Größe ändert. Falls irgendein Fester eine minimale oder maximale Größe haben soll, kannst du das auch angeben. Das wird dann eingehalten, schränkt aber den Layoumanager ein.

    Am Anfang ist es vielleicht etwas schwierig, den Überblick zu behalten, weil man die Layouts nicht sieht. Mal dir am besten deine Fenster auf ein Blatt Papier, zeichne die Layouts ein und implementiere sie dann. Oder probier das Ganze erst mal mit dem QT Designer aus.

    Schöne Grüße,
    Kirstin

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich schließ mich der Empfehlung, Qt Designer zu verwenden, an.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749
    danke danke...
    jetzt habe ich ein problem...

    naja ich habe schon ziemlich viel an der GUI gebaut und es sind mehrere fenster jetzt...
    aberbisher habe ich alles mit setGeometry gemacht.

    Mist...jetzt werde ich wohl das gesamte Layout nochmal machen dürfen wegen QLayout und so oder ?!

    Ist es denn so dass wenn ich z.B einen PushButton habe ja....
    und jetzt zum Beispiel die Schriftgröße meines Systems überdimensional groß mache....also z.B auf 20
    Bleibt dan mit QLayout der gesamte Text des Pushbuttons sichtbar ? ALso dehnt sich der Button dann aus ?
    Weil so wie es jetzt ist wird der Text am ende einfach abgeschnitten....

    Kann mir vielleicht jemand sagen was genau QSizePolicy macht ? Hier steht was von Längen/Weiten Definierung oder so.....
    Könnte ich das hernehmen? Oder ist es einfach doch alles umzustellen?

    Ja hmm qt designer kenne ich. Habe den zu Hilfe genommen aber was der mir ausspuckt istmir ein wenig zu eigensinnig....

    och menno.......
    Geändert von Mat (19-11-2005 um 19:31 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226
    Hallo Mat,

    der Button dehnt sich dann so aus, dass die Schrift darauf passt. Natürlich nur, wenn du seine maximale Größe nicht kleiner eingestellt hast.
    Was QSizePolicy macht, habe ich auch noch nicht herausgefunden

    Im Grunde genommen musst du nicht dein ganzes Programm neu machen. Du musst nur setGeometry herausnehmen und Layouts hinzufügen. Deine Fenster können vermutlich so bleiben, wie sie sind.

    Du sollst auch nicht dein Programm mit dem Qt Designer erstellen, sondern einfach nur ein Gefühl für Layouts bekommen, z.B. wie Spacer etc. funktionieren.

    Schöne Grüße,
    Kirstin

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von Mat
    Ja hmm qt designer kenne ich. Habe den zu Hilfe genommen aber was der mir ausspuckt istmir ein wenig zu eigensinnig....
    Inwiefern stört dich, welchen Code uic generiert?
    Du mußt damit ja nicht arbeiten, du arbeitest im Normalfall ohnehin nur mit davon abgeleiteten Klassen.

    CIao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749
    danke....
    also wahrscheinlich habe ich bisher total falsch gearbeitet......und deswegen interessiert mich jetzt eure meinung dazu...

    bisher habe ich mit dem qtdesigner meine oberfläche gebaut und dann die generierten Klassen einfach ergänzt mit code den ich den klassen gebraucht habe.....abgeleitet habe ich leider nicht so viel.
    SOllte ich das in Zukunft machen?
    @Kirsche...
    naja eigentlich muss ich doch jetzt für jedes widget setGeometry rausnehmen udn dann in ein Layout packen. Das heißt ich muss für jedes widget neue Koordinaten eintragen da sie sich ja ab jetzt nur noch auf das layout beziehen--> das heißt VIIIIEL Arbeit .....

    oder verstehe ich das jetzt falsch ????

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von Mat
    bisher habe ich mit dem qtdesigner meine oberfläche gebaut und dann die generierten Klassen einfach ergänzt mit code den ich den klassen gebraucht habe.....abgeleitet habe ich leider nicht so viel.
    SOllte ich das in Zukunft machen?
    Du kannst natrülich weiter die generierten Dateien ändern, du mußt halt damit rechnen das alles was du rein geschrieben hast, bei der nächsten Generation wieder weg ist.

    Wäre mir persönlich zu mühsam, aber das ist natürlich jedem selbst überlassen.

    Das heißt ich muss für jedes widget neue Koordinaten eintragen da sie sich ja ab jetzt nur noch auf das layout beziehen
    Nein, keine Koordinaten. Das macht das Layout. Du setzt nur die Widgets in entsprechende Layouts hinein.
    Bei einem BoxLayout entscheidet die Einfügreihenfolge über die Position innerhalb des Layouts, beim GridLayout in welche "Zelle" man es einfügt.

    Bei verschachtelten Layouts braucht man schon ein bischen Übung, um das gewünschte Resultat zu erhalten, im Designer sieht man es ja gleich bei der Anwendung des Layouts.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #9
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749
    Hallo,
    da ich nun schon über 8 stunden ohne erfolg etwas versuche....und nirgendwo eine richtige anleitung finde nochmals hier im forum:

    Ich versuche mit dem qt-designer einfach nur eine groupbox also eine Box die eine ÜBerschrift hat mit mehreren widgets eine dynamic so zu erhalten dass sich die box immer so anpasst wie groß die widgets in ihr sind....

    Also:
    Meine Groubbox hat links einfach 4 Lables und jeweils rechts zu jedem label ein QLineEdit entry-field.
    Darunter befindet sich noch ein Label mit einer ComboBox.

    Egal wie ich die Layouts anlege.....ob ich zeilenweise oder spaltenweise Layouts anlege oder dann verschachtelt oder sonstwie komplex. Ob ich Als SizePolicy FIXED/EXPANDING/MINIMUM oder egal was hernehme....für die Spacer sowie für alles andere......

    sobald ich die Schriftgröße z.B auf 20 Stelle wird alles in der Box abgeschnitten und sie dehnt sich nicht aus so dass alles sichtbar wird in der GroupBox....

    Es wäre für mich sehr hilfreich ein Beispiel zu haben wie es geht.

    Desweiteren....
    Ich habe mindestens 20 Groupboxen.
    Wenn ich jetzt für jede der GroupBoxen jeweil so wie ich bis jetzt immer arbeiten musste ca. 10 - 20 Spacer brauche....da werde ich ja alt ?!?!

    Arbeite ich da irgendwie uneffizient ? Oder wie kann ich exakt alles so definieren wie ich es haben will.....spacer zwischen den widgets...spacer zum groupbox rand hin....spacer zwischen den groupboxen etc....

    Ist das so hochkomplex?

    Für eure Hilfe bin ich sehr sehr dankbar.....

  10. #10
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226
    Hallo Mat,

    im Qt-Buch ist ganz Ganze gut erklärt. Angeblich gibt es das auch im Internet (als pdf?). Ich weiß allerdings nicht wo. Ich habe es nur mal gehört bzw. gelesen.

    Ansonsten: Probier mal ein einfaches Beispiel aus. Erstelle dir ein Fenster mit z.B. QDialog. Dann setzt du ein Gridlayout auf dieses Fenster. In das GridLayout fügst du verschiedene Unterfenster ein, also z.B. QButton, QLabel und QLineEdit. Dann guck dir das Ergebnis an. Theoretisch müsste sich das Layout immer mit anpassen, wenn du die Größe dieses Fensters änderst. Spacer brauchst du da erst einmal gar nicht. Mit Margin und - ich glaube - Spacing, kannst du den Abstand zum Rand bzw. zwischen den Fenstern einstellen. Das ist aber schon bei QLayout eingebaut. Wenn du das hast, kannst du QHBoxLayout und QVBoxLayout ausprobieren. Und wenn das alles klappt, kannst du mit Spacern und Stretches arbeiten. Das ist dann für den Feinschliff.

    Schöne Grüße,
    Kirstin

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ansich sollte das ziemlich einfach sein.

    Groupbox auf das Widget setzen

    Elemente einfügen und korrekt anordnen

    Groupbox selektieren

    Toolbar Icon für Gridlayout klicken, fertig

    Am Schluß nicht vergessen, das Widget bzw den Dialog auf mit einem Layout zu versehen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749
    Danke,
    das war mein Fehler...ich habe immer vergessen gehabt auch das "HauptWidget" zu layouten.

    @Anda...

    könntest du mir vielleicht ein kleines Beispiel geben wie ich denn sinnvoll von der Klasse die ich mit dem Designer erstelle erbe einfach?

    Also ich bin es leid sobald ich ne Änderung an der GUI mache meine Funktionellen Aufbau ändern zu müssen.
    Ich habe es jetzt so dass ich ne Klasse für die GUi habe und ne andere für den Ausbau also die Funktionalität und so...

    So wäre es doch am einfachsten oder ?
    Bloß ich kann nur auf die Elemente zugreifen wenn ich im Konstruktor der Klasse die die GUI beschreibt auf dem Heap den Konstruktor der FunktionalKlasse aufrufe.

    Aber das muss doch einfacher gehen..........
    Weil du gemeint hast in nem vorigen posting..........von der KLasse erben.........DANKE

  13. #13
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich mach das immer so:

    Widget/Dialog im Designer erstellen
    Als Name ...Base, also zB SetupDialogBase

    Das wird dann in eine Datei setupdialogbase.ui gespeichert, woraus UIC dann setupdialogbase.h und setupdialogbase.cpp generiert

    Dann macht man eine ganz nornale Klasse

    Code:
    #if !defined(SETUPDIALOG_H)
    #define SETUPDIALOG_H
    
    #include "setupdialogbase.h"
    
    class SetupDialog : public SetupDialogBase
    {
        Q_OBJECT
    
    public:
        SetupDialog(QWidget* parent, const char* name = 0); // oder was man auch immer braucht
    };
    
    #endif
    Alle Widgets des Dialogs kann man in den Methoden von SetupDialog mit genau den Namen ansprechen, die man zuvor im Designer vergeben hat.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  14. #14
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749
    ok danke.......
    ich habe es jetzt so:

    aus der main rufe ich einen QDialog auf der mein MainWindow_Base ist.
    In desssen Konstruktor wird dann die Klasse MainWindow_Use aufgerufen und auch andere Base_Klassen die das MainWindow_Base ergänzen. Der Aufruf wird über Heap ALloziierung aufgerufen. also: neue_Base* nB = new neue_Base(this);

    Ist das so auch einigermaßen verständlich?

    Ich hatte schwierigkeiten aus der Main dann nähmlich das Hauptfenster aufzurufen und daraus dann die weiteren Klassen....

    Wie sieht es denn aus......kann ich denn aus den anderen Base_klassen dann auch jeweils auf die anderen Base_klassen zugreifen?

  15. #15
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Tut mir leid, das hab ich jetzt nicht verstanden.

    Kannst du vielleicht ein Beispiel als .zip anhängen?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

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