Gegenstück zu frameSize() ???

Alles rund um die Programmierung mit Qt
Antworten
para
Beiträge: 21
Registriert: 19. Oktober 2004 20:03

Gegenstück zu frameSize() ???

Beitrag von para »

Hallo,
ich verzweifele derzeit an einem Problem: ich suche eine Methode, mit der ich das Property QWidget::fameSize setzen kann...
Mit QWidget::frameSize() kann ich es zwar auslesen (inkl. WindowFrame!), aber es scheint weder ein Gegenstück (setFrameSize()) noch etwas alternatives zu geben, um die Widgetgröße inkl. des WindowFrames zu setzen. Height und Width kommen ja leider nicht in Frage!

Zur Erklärung des WindowFrames bzw. innerer/äußerer Größe bitte folgenden Link nutzen:
http://doc.trolltech.com/3.3/geometry.html

Hilfe, Para

PS:
Ja, ich brauche die äußere Größe des Widgets... Ich könnte auch die innere verwenden, wenn ich durch Addition der "FrameWidth" die äußere Größe berechnen könnte - gibt es diese "FrameWidth" irgendwo?
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Die innere Größe bekommst du durch width() oder geometry().width().
Wozu willst du aber die komplette Widgetgröße setzten?
para
Beiträge: 21
Registriert: 19. Oktober 2004 20:03

Beitrag von para »

Ich benutze beschriftete (aligned) Label mit border, die ich per drag 'n' drop verschieben/positionieren bzw. vergößern/verkleinern kann. Danach speichere ich die Positionen sowie die Größe dieser Labels, um deren Anordnung später wieder laden zu können... Ich benötige die äußere Größe, damit ich das gesamte Label (inkl. border) berücksichtigen kann. Außerdem stellen diese Positionen und Abmessungen Daten dar, die ich im weiteren noch verwenden muss.
Eine Umstellung auf QCanvas wäre sehr umständlich, wie ich finde, da sich der Text der Label sehr einfach hinsichtlich Fontgröße, -art und Alignment ändern lässt. Auch die drag 'n' drop Geschichte wäre mit einem Canvas und kombinierten CanvasItems + Text deutlich aufwändiger, oder...?

Para
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

Code: Alles auswählen

setGeometry( x,y , breite, höhe);
dürfte das sein was du suchst
benutzte QT 3.2 nc auf w2k
para
Beiträge: 21
Registriert: 19. Oktober 2004 20:03

Beitrag von para »

Leider nein:
Sets the geometry of the widget relative to its parent and excluding the window frame. See the "geometry" property for details.
Da steht ja nunmal "excluding" (wie meistens)... Weitere Ideen?

Gruß, Para
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

dann würde mir nur noch QLayout und QLayoutItem einfallen, was warscheinlich ähnlich funktioniert wie in java die Layout Klassen, damit ist es möglich da zu tun was du möchtest, allerdings habe ich sie selber noch nie benutzt

gandalf
benutzte QT 3.2 nc auf w2k
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Re: Gegenstück zu frameSize() ???

Beitrag von Goos »

para hat geschrieben: PS:
Ja, ich brauche die äußere Größe des Widgets... Ich könnte auch die innere verwenden, wenn ich durch Addition der "FrameWidth" die äußere Größe berechnen könnte - gibt es diese "FrameWidth" irgendwo?
Du musst auch die innere Groesse verwenden, die aeussere kannst einfach nicht setzen.
Dazu musst einfach ueber die Differenz zwischen frameSize() und size() deine Randgroessen berechnen, diese dann in weitere Berechnungen einfliessen lassen und kannst dann per setFixedSize() deine neue Groesse setzen.

Goos
para
Beiträge: 21
Registriert: 19. Oktober 2004 20:03

Beitrag von para »

Tja schade, das hatte ich schon befürchtet...
Kann mir jemand sagen, ob sich die Rahmenstärke (äußere minus innere Größe) jemals ändert - z.B. durch Window-Dekorationswechsel? Es könnte ja auch sein, dass der Wert z.B. immer dem Border Property des Widgets entspricht und somit konstant bleibt, egal auf welcher Platform oder unter welchem Theme...

Para
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

para hat geschrieben: Kann mir jemand sagen, ob sich die Rahmenstärke (äußere minus innere Größe) jemals ändert
Para
Du kannst dich auf jeden Fall nicht darauf verlassen, dass die Rahmenwerte immer gleich sind. Es ist einfach nicht definiert, dass die Rahmenstaerke gleich bleiben muss :D
Intern laeuft die Ermittlung des Rahmens in etwa ueber einen Vergleich zwischen GetWindowRect und GetClientRect ab. Aus dem Grund kann man nie sicher sein, ob der Rahmen gleich bleibt.
Ausserdem scheinen popup Widgets keinen Rahmen zu haben.

Goos
para
Beiträge: 21
Registriert: 19. Oktober 2004 20:03

Beitrag von para »

Gilt das selbst für Label? "Normale" Fenster verhalten sich ja schon etwas anders... Wenn ich z.B. mit

Code: Alles auswählen

lbl->setFrameShape(QFrame::Box);
lbl->setLineWidth(1);
das Aussehen festlege, kann ich daraus nicht das Verhältnis von äußerer zu innerer Größe ableiten?

Para
para
Beiträge: 21
Registriert: 19. Oktober 2004 20:03

Beitrag von para »

Sch**sse!!! Wer lesen kann ist klar im Vorteil! Da renn ich seit Wochen hinter einer Lösung her und gebe sie ständig selbst...! :oops:

Unter erwähntem Link steht ganz deutlich folgendes:
Note that the distinction only matters for decorated top-level widgets. For all child widgets, the frame geometry is equal to the widget's client geometry.
Hat sich also längst erledigt und mein Problem liegt offensichtlich ganz woanders :roll:

Trotzdem danke, Para

PS: Viel Glück mit der neuen Community
Antworten