各項目がラベル付きのチェックボックスである QListView を表示したいと思います。チェックボックスは常に表示されている必要があります。私が考えることができる 1 つの方法は、カスタム デリゲートと QAbstractListModel を使用することです。もっと簡単な方法はありますか?これを行う最も簡単なスニペットを提供できますか?
前もって感謝します
各項目がラベル付きのチェックボックスである QListView を表示したいと思います。チェックボックスは常に表示されている必要があります。私が考えることができる 1 つの方法は、カスタム デリゲートと QAbstractListModel を使用することです。もっと簡単な方法はありますか?これを行う最も簡単なスニペットを提供できますか?
前もって感謝します
PyQtメーリングリストでDavid Boddieによって提供された方法を使用することになりました。彼のコードに基づいた実用的なスニペットは次のとおりです。
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
from random import randint
app = QApplication(sys.argv)
model = QStandardItemModel()
for n in range(10):
item = QStandardItem('Item %s' % randint(1, 100))
check = Qt.Checked if randint(0, 1) == 1 else Qt.Unchecked
item.setCheckState(check)
item.setCheckable(True)
model.appendRow(item)
view = QListView()
view.setModel(model)
view.show()
app.exec_()
注: setData
check ロールをsetCheckState
使用した の呼び出しsetCheckable
を flags の代わりに使用するように変更しました。
独自のモデルを作成している場合は、メソッドQt.ItemIsUserCheckable
からの戻り値にフラグを含めるだけで、メソッドからflags()
の有効な値を返すようにしてください。Qt.CheckStateRole
data()
QStandardItemModel
クラスを使用する場合は、Qt.ItemIsUserCheckable
各アイテムのメソッドに渡すフラグにフラグを含め、そのメソッドsetFlags()
でのチェック状態を設定します。Qt.CheckStateRole
setData()
インタラクティブなPythonセッションで、次のように入力します。
from PyQt4.QtGui import *
model = QStandardItemModel()
item = QStandardItem("Item")
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setData(QVariant(Qt.Checked), Qt.CheckStateRole)
model.appendRow(item)
view = QListView()
view.setModel(model)
view.show()