1

アクティベーション時にステータスを変更するチェックボックス項目のリストを作成しようとしています。アクティブ化信号を接続でき、すべてが機能しているように見えますが、画面が変わります。ここにいくつかの手順がありませんか?

リストの作成は次のとおりです。

self.listField = QtGui.QListWidget(self)

muted_categories = qb.settingsCollection['mutedCategories'].split('|')
main_categories = sorted(set(qb.categoryTopNames.values()))

for category in main_categories:
   item = QtGui.QListWidgetItem(category, self.listField)
   item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
   if category in muted_categories:
      item.setCheckState(QtCore.Qt.Checked)
   else:
      item.setCheckState(QtCore.Qt.Unchecked)

self.listField.connect(self.listField, QtCore.SIGNAL('itemActivated(QListWidgetItem*)'), self.doItemChangeState)

ハンドラは次のとおりです。

def doItemChangeState(self, item):
   """ invert the state of the activated item """

   if item.checkState() == QtCore.Qt.Checked:
      item.setCheckState(QtCore.Qt.Unchecked)
   else:
      item.setCheckState(QtCore.Qt.Checked)

クリック後にハンドラーが起動することを確認しました-そこに印刷物を置くと、「チェック済み」/「チェックなし」が交互に表示されます。チェックボックス自体を更新するにはどうすればよいですか?

編集: update() を呼び出して、itemChanged シグナルを発行しようとしました...これまでのところ運がありません。

4

1 に答える 1

2

今はこれをテストすることはできませんが...アイテムがチェックされている/チェックされていないときにPyQt4が画面の更新を自動的に処理したという印象を受けました(少なくとも、QCheckBoxアイテムの場合はそうです)。イベント ハンドラーが実際にユーザーのアクションを取り消しているように見えます。self.connect 行をコメントアウトして、再度実行してみましたか?

私が理解しているように、 setCheckState() は実際には各アイテムのデフォルト状態を設定することを目的としています...

于 2010-05-19T16:13:47.667 に答える