Qt ProTip:使用QScrollArea时要记住一件非常重要的事情

Qt ProTip:使用QScrollArea时要记住一件非常重要的事情,qt,pyqt4,Qt,Pyqt4,今天我花了3个小时来弄清楚为什么我的qscrollara不起作用。最后发现原因是我动态添加到ScrollArea的组件没有任何布局,因此在添加时无法计算其最小大小。 因此,如果有人在QScrollArea中动态添加元素,请确保您的小部件具有某些区域。我看到很多帖子,人们都面临着同样的问题,没有直接的答案,布局是原因,所以这就像一篇帖子通知所有用户,确保你首先在你想要附加到QScrollArea的所有小部件中都有一个布局 谢谢一个例子是 import sys from PyQt4 import

今天我花了3个小时来弄清楚为什么我的
qscrollara
不起作用。最后发现原因是我动态添加到ScrollArea的组件没有任何布局,因此在添加时无法计算其最小大小。 因此,如果有人在QScrollArea中动态添加元素,请确保您的小部件具有某些区域。我看到很多帖子,人们都面临着同样的问题,没有直接的答案,布局是原因,所以这就像一篇帖子通知所有用户,确保你首先在你想要附加到QScrollArea的所有小部件中都有一个布局

谢谢

一个例子是

import sys

from PyQt4 import QtCore, QtGui, uic


mainBase, mainForm = uic.loadUiType("main.ui")
labelBase, labelForm = uic.loadUiType("labelsForScroll.ui")
dataBase, dataForm = uic.loadUiType("data.ui")
emptyBase, emptyForm = uic.loadUiType("empty.ui")

class Data(dataBase, dataForm):
    def __init__(self, parent=None):
        super(dataBase, self).__init__(parent)
        self.setupUi(self)

    def setSl(self, num):
        self.sl.setText(str(num))

class Label(labelBase, labelForm):
    def __init__(self, parent=None):
        super(labelBase, self).__init__(parent)
        self.setupUi(self)


class Empty(emptyBase, emptyForm):
    def __init__(self, parent=None):
        super(emptyBase, self).__init__(parent)
        self.setupUi(self)

class Main(mainBase, mainForm):

    def __init__(self, parent=None):
        super(mainBase, self).__init__(parent)
        self.setupUi(self)
        self.__l = Label()
        #self.vert.addWidget(l)
        self.__maxSlNum = 0
        self.__datLis =[]
        #self.addField()
        self.__e = Empty()
        self.__e.layout().addWidget(self.__l)

        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setWidget(self.__e)

        QtCore.QObject.connect(self.add, QtCore.SIGNAL("clicked()"), self.addField)




    def addField(self):
        d = Data()
        self.__maxSlNum+=1
        d.setSl(self.__maxSlNum)
        self.__datLis.append(d)
        lay = self.__e.layout()
        lay.addWidget( d)




if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    app.setStyle("cleanlooks")
    m = Main()
    m.show()
    sys.exit(app.exec_())

用户界面文件的链接可以在这里找到

看看这个问题:也许你可以避免疯狂的Voters这不是一个问题,我知道,但我把它作为一个提示,让其他人可以从中受益。