0

QLabels在 a上显示多个QFrame,放入 aQScrollArea中。

我可以告诉QScrollArea用 使任何QLabels可见QScrollArea.ensureWidgetVisible(QLabel),但我似乎找不到一种方法来确定子小部件当前是否可见。我会期待类似的东西QScrollArea.isWidgetVisible(QWidget)

我尝试使用孩子自己的方法,即,QLabel.isVisible()但无论 是否QLabel可见QScrollArea,它总是返回True(参见下面的示例)。有什么办法解决这个问题?

#!/usr/bin/env python

import sys
from PyQt4 import QtGui, QtCore



application = QtGui.QApplication(sys.argv)

class Area(QtGui.QScrollArea):

    def __init__(self, child):
            super(Area, self).__init__()
        self.child = child
        self.setWidget(self.child)
        self.setFixedSize(100, 100)


class MainWidget(QtGui.QFrame):

    def __init__(self, parent=None):
            QtGui.QFrame.__init__(self, parent)
        self.layout = QtGui.QVBoxLayout()
        n = 1
        while n != 10:
            label = QtGui.QLabel('<h1>'+str(n)+'</h1>')
            self.layout.addWidget(label)
            n += 1
        self.setLayout(self.layout)

    def wheelEvent(self, event):
        print "Wheel Event:"
        for child in self.children()[1:]:
            print child.isVisible()
        event.ignore()

mainwidget = MainWidget()
area = Area(mainwidget)
area.show()
application.exec_()
4

2 回答 2

3

isVisible与您想要做的不同。它告诉小部件是否隐藏。即使它不在视口中,小部件也是可见的,除非您使用hide它。

你可以使用visibleRegion. 应该发生绘制事件的是小部件的区域。如果标签在视口之外,那么它的区域应该是一个空区域。

def wheelEvent(self, event):
    print "Wheel Event:"
    for child in self.children()[1:]:
        print child.text(), 'is visible?', not child.visibleRegion().isEmpty()
    event.ignore()
于 2012-05-17T07:58:07.647 回答
0

QScrollArea::ensureWidgetVisible可以。

您可以QSCrollArea::childAt ( int x, int y ).isvisble()用于检查小部件的可见性。

于 2012-05-17T07:16:08.780 回答