2

2 つの listWidget を作成する予定で、それらには同じ量のリストがあります。そのため、listWidget が上下にスクロールすると、別のリストも移動します。しかし、関連する信号が見つかりません。私は何か見落としてますか?

4

3 に答える 3

7

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_())
于 2011-12-29T18:42:12.273 に答える
1

QListWidgetはQListViewを継承し、QListViewはQAbstractItemViewを継承します。

とにかく、すべてのQListWidgetメンバーが、継承されたメンバーを含むすべてのメンバーのリストをクリックしているのを見ることができます。ここには、QAbstractScrollAreaから継承されたverticalScrollBar()const:QScrollBar*メソッドがあります。

listWidgetの垂直スクロールバーvalueChanged信号に接続できます。

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

onScrollBarValueChangedスロット(シグナルハンドラー)はどこにありますか。

于 2011-12-29T13:22:22.070 に答える
0

scrollContentsBy()スクロールバーの動きを追跡するには、仮想関数を再実装する必要があります。QAbstractSlider::actionTriggered()信号とsliderPositionプロパティも見てください

于 2011-12-29T10:21:17.873 に答える