Пользовательский виджет в ScrollArea уничтожен! - PullRequest
3 голосов
/ 02 марта 2011

У меня есть qscrollarea и внутри него qgridlayout.В сетке я создаю несколько пользовательских виджетов (для простоты эти виджеты являются просто групповым блоком и меткой) и добавляю по одному в каждую строку.

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

Я добавляю пользовательские виджеты в область прокрутки следующим способом:

    def addBookWidget(self):
    self.book_grid = QtGui.QGridLayout(self.book_scrollArea)

    widget = py_BookWidget(self.book_scrollArea)
    widget2 = py_BookWidget(self.book_scrollArea)
    widget3 = py_BookWidget(self.book_scrollArea)
    widget4 = py_BookWidget(self.book_scrollArea)
    widget5 = py_BookWidget(self.book_scrollArea)
    widget6 = py_BookWidget(self.book_scrollArea)
    widget7 = py_BookWidget(self.book_scrollArea)


    self.book_grid.addWidget(widget,0,0)
    self.book_grid.addWidget(widget2,1,0)
    self.book_grid.addWidget(widget3,2,0)
    self.book_grid.addWidget(widget4,3,0)
    self.book_grid.addWidget(widget5,4,0)
    self.book_grid.addWidget(widget6,5,0)
    self.book_grid.addWidget(widget7,6,0)
    self.book_scrollArea.setLayout(self.book_grid)

    widget.show()
    widget2.show()
    widget3.show()
    widget4.show()
    widget5.show()
    widget6.show()
    widget7.show()

Пользовательский виджет расширяет QWidget и переопределяет sizeHint:

class py_BookWidget(QtGui.QWidget):
def __init__(self, parent=None):
    super(py_BookWidget, self).__init__(parent)
    self.book = Ui_book_widget()  
    self.book.setupUi(self)  #This is loading my QT Designer Code

def sizeHint(self):
    print "test"
    return QtCore.QSize(660, 300)

Вызывается метод sizeHint, но виджеты все еще сжимаются до гораздо меньшей высоты.Все элементы в пользовательском виджете имеют фиксированную ширину и высоту, а минимальная и максимальная высота и ширина установлены на 660, 300.

У кого-нибудь есть предложение попробовать?Спасибо!

Дополнительная информация: область прокрутки находится в главном окне, а логическое значение widgetResizable установлено в False.

Завтра я попытаюсь удалить пользовательский виджет и просто посмотреть, смогу ли я получитьscrollArea для работы с обычным виджетом.

1 Ответ

2 голосов
/ 05 марта 2011

QScrollArea принимает только один виджет. Нет макетов.

Добавьте макет и виджеты в простой QWidget, а затем добавьте его в QScrollArea с помощью setWidget ()

...