ScrollArea中的自定义控件被压扁了!

4 投票
1 回答
1932 浏览
提问于 2025-04-16 12:48

我有一个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。

明天我会试着去掉自定义小部件,看看能不能让滚动区域和普通小部件一起正常工作。

1 个回答

3

QScrollArea 只能放一个小部件,不能直接放布局。

你需要先把布局和小部件放到一个普通的 QWidget 里,然后再用 setWidget() 方法把这个 QWidget 加到 QScrollArea 里。

撰写回答