0

に配置された にQLabels複数表示しています。QFrameQScrollArea

QScrollAreaでいずれかをQLabels表示するように指示できQScrollArea.ensureWidgetVisible(QLabel)ますが、子ウィジェットが現在表示されているかどうかを確認する方法が見つからないようです。のようなものを期待しますQScrollArea.isWidgetVisible(QWidget)

私は子供自身のメソッドを使ってみQLabel.isVisible()ましQLabelた。これに対する解決策は何ですか?QScrollAreaTrue

#!/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 に答える