문제

대기열에서 사람들의 이름 목록을 검색하고 각 사람에 대해 addWidget () 함수를 사용하여 이름이있는 확인란을 QGRIDLAYOUT에 배치하고 싶습니다. 항목을 QListView에 성공적으로 배치 할 수는 있지만 새 행을 만드는 대신 서로 맨 위에 씁니다. 내가 이것을 어떻게 고칠 수 있는지에 대한 생각이 있습니까?

self.chk_People = QtGui.QListView()
items = self.jobQueue.getPeopleOffQueue()

for item in items:
    QtGui.QCheckBox('%s' % item, self.chk_People)

self.jobqueue.getPeopleOffqueue ()는 도움이되면 [ 'bob', 'sally', 'Jimmy'와 같은 것을 반환합니다.

도움이 되었습니까?

해결책

이 라인 :

QtGui.QCheckBox('%s' % item, self.chk_People)

목록보기에 확인란을 추가하지 않으며 목록보기로만 부모 로서만 생성되며 큰 차이가 있습니다.

목록보기를 사용하는 가장 간단한 방법은 QListWidget 편의 수업. 이를 위해 인스턴스대로 확인란을 만듭니다 QListWidgetItem 그리고 사용하십시오 addItem 목록 위젯에서 실제로 추가 할 수 있습니다.

그리드 레이아웃에 추가하는 데 문제가 있습니까? 일반적으로, 당신이 가진 확인란의 양이 작은 그리드 레이아웃이 더 좋을 경우, 그것은 모두 앱을 원하는 방법에 따라 다릅니다. 그러나 그러한 객체가 많을 수 있다면 목록 위젯/보기가 가장 좋습니다.

다른 팁

PYQT의 솔루션을 말할 수는 없지만 따라야 할 구조는 다음과 같습니다. QListView는 필요한 작업을 수행 할 수 있으며 별도의 확인란을 만들 필요가 없습니다. 서브 클래스를 만듭니다 QAbstractItemModel 또는 QStandardItemModel (얼마나 많은 코딩을 원하는지에 따라) flags() 적절한 플래그를 반환하는 방법 포함 Qt::ItemIsUserCheckable,에서 columncount() 메소드 확인란을 추가하여 추가 열을 추가합니다. data 확인란이 나타나기를 원하는 열에 대한 메소드 확인 된 상태를 반환합니다. Qt::Checked, Qt::UncheckedQt::CheckStateRole.

이것은 또한 그것을 사용하여 달성 할 수 있습니다 QListWidget 사용할 수있는 곳 QListWidgetItem 데이터를 추가하고 모델을 만들 필요가 없습니다. 에 QListWidgetItem 당신이 사용할 수있는 setFlags() 그리고 setData(QVariant(bool, Qt::CheckStateRole) 모델을 서브 클래스하지 않아도됩니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top