Seite 1 von 1

Gegenstück zu frameSize() ???

Verfasst: 19. Oktober 2004 21:28
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?

Verfasst: 19. Oktober 2004 23:05
von lepsai
Die innere Größe bekommst du durch width() oder geometry().width().
Wozu willst du aber die komplette Widgetgröße setzten?

Verfasst: 20. Oktober 2004 18:09
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

Verfasst: 21. Oktober 2004 12:06
von gandalf

Code: Alles auswählen

setGeometry( x,y , breite, höhe);
dürfte das sein was du suchst

Verfasst: 21. Oktober 2004 18:58
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

Verfasst: 25. Oktober 2004 10:23
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

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

Verfasst: 25. Oktober 2004 11:52
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

Verfasst: 25. Oktober 2004 14:04
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

Verfasst: 25. Oktober 2004 14:57
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

Verfasst: 28. Oktober 2004 19:54
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

Verfasst: 28. Oktober 2004 20:09
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