2015-07-09 15 views
1

Я хотел бы знать, как я могу создать виджет, который будет автоматически соответствовать пространству, когда я отредактирую высоту QDialog, который содержит этот виджет.Автоматически ajust Высота QWidget

В примере ниже QPushButton будет соответствовать ширине QDialog, но не высоте. Однако, если я создаю QTextEdit вместо QPushButton, QTextEdit отлично подойдет QDialog.

from PySide.QtGui import * 

class c (QDialog): 
    def __init__(self): 
     QDialog.__init__(self) 

     self.setLayout(QVBoxLayout()) 
     self.layout().setSpacing (0) 
     self.layout().setContentsMargins(0,0,0,0); 

     btn = QPushButton() 
     self.layout().addWidget(btn) 

     self.exec_() 

a = c() 

ответ

1

The C++ documentation of the QBoxLayout Class состояния для

QBoxLayout::addWidget(widget, stretch=0, alignment=0) 

Если коэффициент растяжения равен 0 и ничего в QBoxLayout имеет коэффициент растяжения больше нуля, пространство распределяется согласно QWidget: sizePolicy () каждого виджета, который задействован.

Так, взглянув на умолчанию Policy в виде QPushButton

>>> btn = QPushButton() 
>>> btn.sizePolicy().horizontalPolicy() 
1 
>>> btn.sizePolicy().verticalPolicy() 
0 

мы находим, что вертикальная политика фиксируется. Добавление кнопки

[...] 

    btn = QPushButton() 
    policy = btn.sizePolicy().horizontalPolicy() 
    btn.setSizePolicy(policy, policy) 
    self.layout().addWidget(btn) 

[...] 

теперь автоматически настраивает кнопку с помощью вашего диалога.

1

Вам необходимо установить политику размера для расширения. Я не знаю синтаксиса в python, но вы можете легко перевести его из C++.

QPushButton* button = new QPushButton(this); 
button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);