10

各項目がラベル付きのチェックボックスである QListView を表示したいと思います。チェックボックスは常に表示されている必要があります。私が考えることができる 1 つの方法は、カスタム デリゲートと QAbstractListModel を使用することです。もっと簡単な方法はありますか?これを行う最も簡単なスニペットを提供できますか?

前もって感謝します

4

2 に答える 2

23

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_()

注: setDatacheck ロールをsetCheckState使用した の呼び出しsetCheckableを flags の代わりに使用するように変更しました。

于 2009-05-13T03:34:00.600 に答える
13

独自のモデルを作成している場合は、メソッドQt.ItemIsUserCheckable からの戻り値にフラグを含めるだけで、メソッドからflags()の有効な値を返すようにしてください。Qt.CheckStateRoledata()

QStandardItemModelクラスを使用する場合は、Qt.ItemIsUserCheckable 各アイテムのメソッドに渡すフラグにフラグを含め、そのメソッドsetFlags()でのチェック状態を設定します。Qt.CheckStateRolesetData()

インタラクティブな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()
于 2009-05-12T19:49:48.683 に答える