2012-01-08 14 views
5

Quando ho una QMainWindow con un layout a griglia, quando la ridimensiono con il mouse, non andrà al di sotto delle dimensioni minime necessarie per mostrare correttamente tutti i controlli . Nella mia app a volte nascondo i controlli a livello di codice, ma la finestra rimane delle stesse dimensioni e il resto dei controlli appare sparsi, con troppo spazio tra di loro. Finisco per ridimensionare la finestra di dialogo manualmente in modo che non sembri brutta.Come ridimensionare programmaticamente una QMainWindow alla sua dimensione minima

Posso impostare in modo programmatico le dimensioni verticali della finestra di dialogo al minimo che ottengo quando ridimensiono manualmente dopo aver nascosto i controlli al suo interno?

+0

+1 Sono frustrato da questo troppo. –

+0

Appena capito, vedi la mia risposta qui sotto. – sashoalm

risposta

0

Questo codice farà il trucco (si ridimensiona solo l'altezza):

QWidget widget; 
    widget.resize(widget.width(), widget.minimumHeight()); 
+0

In che cosa differisce da 'widget.resize (widget.width(), 1)?' E c'è qualche differenza tra 0 e 1? (Sono un principiante, come puoi ovviamente dire.) –

+0

Vuoi dire che widget.minimumHeight() restituisce 0? Avevo pensato che restituisse la dimensione minima necessaria per tutti i controlli, ma non ho controllato il valore effettivo restituito dalla funzione. – sashoalm

+0

Ciò è stato utile, in quanto, quando si utilizzano i widget del dock, è possibile ottenere l'altezza di un widget superiore/inferiore del dock e quindi impostare la dimensione minima della finestra principale alla sua altezza corrente meno l'altezza del widget del dock che si desidera nascondere. – guitarpicva

1

C'è una gerarchia tra QLayout::SizeConstraint, QWidget::minimumSizeHint, QWidget::minimumSize e lo si può trovare nella documentazione.

  • QWidget::minimumSize non è impostato per impostazione predefinita. Quando è, prevale su QWidget::minimumSizeHint
  • QWidget::minimumSizeHint non è valido se il widget non è in un layout (nel senso che può essere ridimensionato a 0 con il mouse), altrimenti utilizzare quello definito dal layout.
  • QLayout::SizeConstraint detiene il comportamento di layout predefinito dei widget che * direttamente * gestiscono. Se nidifichi un layout A all'interno di un layout B, tutti i widget aggiunti a A utilizzeranno la relativa proprietà. Inoltre, se un widgetin B definisce il proprio layout, allora questi vincoli di layout sono quelli da applicare per il widget W.

Sapendo che, seguire questi passaggi. Si potrebbe lavoro, non ho provare :):

  • impostare la dimensione minima di tutti i widget che si usa.
  • Verificare che il vincolo di dimensione di tutti i layout sia impostato su QLayout::SetDefaultConstraint.
2

ho trovato che il ridimensionamento della centralWidget nel QMainWindow poi il ridimensionamento della QMainWindow stesso fa il trucco. In altre parole:

from PyQt4 import QtGui 
class MyMainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     # define some widgets and stuff 
    def whenWidgetsAreHidden(self): 
     # this method should be triggered when you hide your widgets 
     self.centralWidget.adjustSize() 
     self.adjustSize() 

Si noti che ci sono altri widget in QMainWindowLayout. Per questa immagine dallo Qt Documentation, ci sono anche i Dock Widget e altre cose che potrebbero essere presenti. Io uso solo il centralWidget quindi questa soluzione funziona per me.

QMainWindow Layout

Problemi correlati