Problema con layout

Problema con layout

Messaggioda Marco Trapanese » 19 mag , 2012 9:18 am

Ciao,

ho un problema semplice ma di cui non capisco la causa. In sintesi ottengo un comportamento dei layout diverso da quello che mi aspetto.
Il codice è molto breve ma essendo suddiviso in diverse classi credo ci si confonda un po'. Provo a spiegarlo a parole, nel caso poi servisse lo copio-incollo senza problemi.

Nella mia QMainWindow ho una QFrame, inserita in un QGridLayout.
Nella QFrame ho una mia classe derivata da QWidget, chiamiamola "Selector", in un QGridLayout (unico elemento)
Nel Selector sono presenti delle classi derivate da QToolButton, chiamiamole "Item", in un QGridLayout, disposti proprio a griglia quadrata.

Ciascuna classe ha impostato la proprietà parent al rispettivo genitore. Cioè, la QFrame sulla QMainWindow, il Selector sulla QFrame, gli Item sul Selector.
Ciascuna classe ha impostato la proprietà QSizePolicy su Qt::Expanding.

Mi aspetto che la QFrame occupi tutto lo spazio a lei disponibile -> lo fa.
Mi aspetto che il Selector occupi tutto lo spazio disponibile nella QFrame -> NON lo fa.
Mi aspetto che gli Item occupino tutto lo spazio disponibile nel Selector -> NON lo fanno.

Viceversa succede che le dimensioni dei widget si comportano come se avessero la QSizePolicy impostata a Qt::Minimum.

E' sufficiente la spiegazione per capire dove sbaglio?
Grazie mille
Marco Trapanese
Troll competente
 
Messaggi: 135
Iscritto il: 19 giu , 2010 10:31 am
Programmo in: C,C++,.NET,Python,QT

Re: Problema con layout

Messaggioda Marco Trapanese » 19 mag , 2012 10:02 am

Il problema era qui:

Codice: Seleziona tutto
myLayout->addWidget(mySelector, 0, 0, 1, 1, Qt::AlignCenter);


L'indicazione dell'allineamento sembra escludere la proprietà QSizePolicy.
Vero che nella guida è scritto che "The default alignment is 0, which means that the widget fills the entire cell." ma questa è una cosa diversa.

Prima di mettere risolto, vorrei capire se c'è modo di avere entrambe le opzioni attive.
Marco Trapanese
Troll competente
 
Messaggi: 135
Iscritto il: 19 giu , 2010 10:31 am
Programmo in: C,C++,.NET,Python,QT

Re: Problema con layout

Messaggioda TrueNeo » 19 mag , 2012 7:29 pm

secondo me se gli dici che deve essere sviluppato per tutto lo spazio disponibile che senso ha mettergli l'allineamento? allineato a cosa se occupa tutto lo spazio e quindi non lascia spazio a destra , sinistra o entrambi?
Daniele

Prima di porre domande leggere il Regolamento e FAQ, poi usare la funzione "Cerca".
Avatar utente
TrueNeo
Admin
 
Messaggi: 451
Iscritto il: 29 dic , 2009 7:42 pm
Località: Bari
Programmo in: C++

Re: Problema con layout

Messaggioda Marco Trapanese » 23 mag , 2012 12:50 pm

TrueNeo ha scritto:secondo me se gli dici che deve essere sviluppato per tutto lo spazio disponibile che senso ha mettergli l'allineamento? allineato a cosa se occupa tutto lo spazio e quindi non lascia spazio a destra , sinistra o entrambi?



Stai trascurando il fatto che impostare la QSizePolicy a Expanding significa che il widget può occupare tutto lo spazio disponibile, ma non implica che ciò sia possibile.
Nel mio caso ho dei vincoli sulla forma, che deve risultare quadrata. Per cui ha perfettamente senso utilizzare entrambe le opzioni. Il widget si deve ingrandire il più possibile sfruttando tutto lo spazio disponibile, ma nel frattempo deve mantenere l'allineamento in quanto se lo spazio disponibile fosse un rettangolo avanzerebbero delle aree che non potranno essere occupate.
Marco Trapanese
Troll competente
 
Messaggi: 135
Iscritto il: 19 giu , 2010 10:31 am
Programmo in: C,C++,.NET,Python,QT

Re: Problema con layout

Messaggioda TrueNeo » 29 mag , 2012 7:19 pm

Per mantenere il widget quadrato puoi settare la policy solo su un asse e poi impostare QSizePolicy::setWidthForHeight ( bool dependent ) o l'analoga per l'altezza http://qt-project.org/doc/qt-4.8/qsizep ... htForWidth .
Daniele

Prima di porre domande leggere il Regolamento e FAQ, poi usare la funzione "Cerca".
Avatar utente
TrueNeo
Admin
 
Messaggi: 451
Iscritto il: 29 dic , 2009 7:42 pm
Località: Bari
Programmo in: C++

Re: Problema con layout

Messaggioda Marco Trapanese » 01 giu , 2012 10:37 am

Devo verificare se poi l'allineamento funziona ancora. Appena ho tempo provo e torno a riferire.
Marco Trapanese
Troll competente
 
Messaggi: 135
Iscritto il: 19 giu , 2010 10:31 am
Programmo in: C,C++,.NET,Python,QT


Torna a Qt & C++

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti