Frage zum Widget Layout mit wxWidgets



  • Hi,

    ich habe eine Frage zum Layout bei wxWidgets. Ich habe ein wxBoxSizer in dem 2 wxStaticBoxSizer (Sizer1,Sizer2) enthalten sind. Momentan expanden beide inneren Sizer in alle Richtungen und sich daher auch gleich groß.

    Was ich möchte - aber leider nicht weiß wie - ist,
    -> dass der obere Sizer kleiner ist als der untere
    -> und sich beim resizen vom Window langsamer vergrößert bzw. verkleinert
    -> und auch eine mindest- und maximumhöhe hat, ab der sich nur noch die Größe des unteren Widgets verändert.

    Geht das überhaupt mit dem wxBoxSizer oder brauch ich da was anderes für?

    +------------------------+
    +                        +
    +  +------------------+  +
    +  +     Sizer 1      +  +
    +  +------------------+  +
    +                        +
    +  +------------------+  +
    +  +                  +  +
    +  +     Sizer 2      +  +
    +  +                  +  +
    +  +------------------+  +
    +                        +
    +------------------------+
    


  • Direkt mit den Sizern geht das glaube ich nicht. Evtl kannst du mal probieren ob es einen Einfluß hat wenn du beim hinzufügen der Sizer die proportion unterschiedlich setzt:
    http://docs.wxwidgets.org/stable/wx_wxsizer.html#wxsizeradd

    Was auf jeden Fall geht ist der Wert Gravity im Splitter Window:
    http://docs.wxwidgets.org/stable/wx_wxsplitterwindow.html#wxsplitterwindowsetsashgravity
    Vielleicht kannst du das ja nehmen und den Splitter verstecken, so dass man die Größe nicht mehr manuell ändern kann.
    Beim SplitterWindow kannst du auch eine minimale Größe für die Panes angeben. Der Wert gilt dann aber für beide.


  • Mod

    Das geht mit Sizern. Weiss nur nicht, ob wxBoxSizer damit der Ideale ist, aber mit wxFlexGridSizer solle das gehen.

    Evtl. postest du einfach mal deinen bisherigen Code.



  • Kann man dem wxFlexGridSizer nicht nur sagen welche Spalten/Zeilen wachsen sollen?
    Ich dachte es geht darum, dass die einzelnen Teile im unterschiedlichen Verhältnis wachsen.

    Ich hab das aber noch nicht ausprobiert, da ich bis jetzt nur innerhalb eines SplitterWindows mal die Anforderung hatte und das dort mit dem Parameter gravity funktioniert.


  • Mod

    Gordon73 schrieb:

    Kann man dem wxFlexGridSizer nicht nur sagen welche Spalten/Zeilen wachsen sollen?
    Ich dachte es geht darum, dass die einzelnen Teile im unterschiedlichen Verhältnis wachsen.

    Das kannst du auch bei einem FlexGridSizer erreichen. Wie du schon gepostet hast, gibt es bei Sizer::Add dafür einen Parameter.



  • Hi,

    hab's hinbekommen. Das Verhältnis lässt sch über AddGrowable[Row/Col] einstellen:

    wxBoxSizer * querySizer = ...;
      wxStaticBoxSizer * resultSizer = ...;
    
      wxFlexGridSizer * topSizer = new wxFlexGridSizer(2, 1, 5, 5);
      topSizer->SetFlexibleDirection(wxBOTH);
      topSizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
      topSizer->AddGrowableCol(0);
      topSizer->AddGrowableRow(0, 1);
      topSizer->AddGrowableRow(1, 3);
      topSizer->Add(querySizer, wxSizerFlags(1).Expand().Border(wxALL &~ wxBOTTOM, 10));
      topSizer->Add(resultSizer, wxSizerFlags(1).Expand().Border(wxALL &~ wxTOP, 10));
    

    Was ich allerdings immer noch nicht weiß ist wie ich dem oberen Sizer eine mindest- und maximalhöhe zuweise.

    Es gibt bei den Sizern ja nur SetMinSize und selbst dass funktioniert nicht so richtig, denn die QueryBox lässt sich kleiner als MinSize resizen und erst kurze Zeit später springt es auf die MinSize.


Anmelden zum Antworten