2016-09-05 3 views
0

Qt 4.8。私は3つの州を持つために私のリストにいくつかの項目が必要です。だから私は、次のコードを追加します。QListWidgetアイテムをマウスクリック(トリステート)で部分的にチェックします。

item = QtGui.QListWidgetItem("Hello there") 
item.setFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsUserCheckable | 
    QtCore.Qt.ItemIsTristate) 
item.setCheckState(QtCore.Qt.PartiallyChecked) 

アイテムが正常にに設定されている部分的にその作成に状態をチェックしますが、さらにマウスのクリックは、それ/未チェック状態を確認の間を切り替えます。

答えて

0
我々は自動的にはQt 4.8で3つの状態を反復処理する QListWidgetをすることはできません

「原因(ItemIsUserTristateフラグはQtの5.5で追加されました)、私たちはそれを手動でやる:

CHECKSTATE_ROLE = 32 

def lstFiles_itemChanged(self, item): # slot 
    if item.flags() & QtCore.Qt.ItemIsTristate: 
     if item.checkState() == QtCore.Qt.Checked and \ 
         item.data(CHECKSTATE_ROLE) == QtCore.Qt.Unchecked: 
      item.setCheckState(QtCore.Qt.PartiallyChecked) 
     item.setData(CHECKSTATE_ROLE, item.checkState()) 

item = QtGui.QListWidgetItem("Buenas noches") 
if this_item_needs_tristate: 
    item.setFlags(item.flags() | QtCore.Qt.ItemIsTristate) 
    state = QtCore.Qt.PartiallyChecked 
else: 
    state = QtCore.Qt.Checked 
item.setCheckState(state) 
item.setData(CHECKSTATE_ROLE, item.checkState()) 

項目はその前のチェック状態を記憶していますユーザデータ要素内にあるので、itemChanged上で状態を適切に変更することができます。

1

QtCore.Qt.ItemIsTristateが推奨されていましたが、それはItemIsAutoTristateに置き換えられました。これは、子アイテムを持つアイテムの部分チェックステータスを自動的に処理します。

Qt 5.5以降では、QtCore.Qt.ItemIsUserTristateを使用して必要な動作を行うことができます。

+0

Qt 4.8では簡単にできませんか? – Winand

+0

さて、 'ItemIsTristate'は' QTreeWidget'で動作します。 docs: '階層モデルの項目は、すべてではないが一部の子供がチェックされているかどうかを部分的にチェックすることができます.'その場合、' QListWidget'とは何の関係もありません。そして、なぜフラグが「ItemIsAutoTristate」に名前が変更されたのかは明らかです。 – Winand

関連する問題