PyQt4: есть ли сигнал, связанный с полосой прокрутки? - PullRequest
0 голосов
/ 29 декабря 2011

Я планирую создать два listWidget, и они имеют одинаковый объем списка. Таким образом, когда список виджетов прокручивается вверх и вниз, другой также перемещается по списку. Но я не могу найти связанный сигнал. Я что-то пропустил?

Ответы [ 3 ]

5 голосов
/ 29 декабря 2011

Вам необходимо подключить сигналы valueChanged одной полосы прокрутки к слоту setValue другой полосы прокрутки (и наоборот).

На первый взгляд это может показаться опасно рекурсивным, но кажется, что Qtчтобы справиться с этим без проблем, как показано в этом примере:

from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.listA = QtGui.QListWidget(self)
        self.listB = QtGui.QListWidget(self)
        layout = QtGui.QHBoxLayout(self)
        layout.addWidget(self.listA)
        layout.addWidget(self.listB)
        for index in range(100):
            self.listA.addItem('Sample text for Item %d' % index)
            self.listB.addItem('Sample text for Item %d' % index)
        self.listA.horizontalScrollBar().valueChanged.connect(
            self.listB.horizontalScrollBar().setValue)
        self.listB.horizontalScrollBar().valueChanged.connect(
            self.listA.horizontalScrollBar().setValue)
        self.listA.verticalScrollBar().valueChanged.connect(
            self.listB.verticalScrollBar().setValue)
        self.listB.verticalScrollBar().valueChanged.connect(
            self.listA.verticalScrollBar().setValue)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
1 голос
/ 29 декабря 2011

QListWidget наследует QListView , который наследует QAbstractItemView , который ...

В любом случае вы можете видеть, как все члены QListWidget щелкают по Список всех членов, включая унаследованные члены , где вы найдете verticalScrollBar () const: QScrollBar * метод, который унаследован от QAbstractScrollArea .

Вы можете подключиться к вертикальной полосе прокрутки listWidget valueChanged сигнал:

listWidget.verticalScrollBar().valueChanged.connect(onScrollBarValueChanged)

Где onScrollBarValueChanged - слот (обработчик сигнала).

0 голосов
/ 29 декабря 2011

Чтобы отследить движение полосы прокрутки, вы должны переопределить виртуальную функцию scrollContentsBy().Посмотрите также на сигнал QAbstractSlider::actionTriggered() и на свойство sliderPosition

...