سؤال

وأريد أن عرض QListView حيث كل عنصر ومربع مع بعض التسمية. وينبغي أن تكون مربعات مرئية في جميع الأوقات. طريقة واحدة أستطيع أن أفكر في يستخدم مندوب العرف وQAbstractListModel. هي الطرق هناك أبسط؟ يمكنك توفير أبسط مقتطف يفعل ذلك؟

وشكرا مقدما

هل كانت مفيدة؟

المحلول

إذا كنت تكتب نموذج الخاص بك، فقط تشمل Qt.ItemIsUserCheckable العلم في قيمة الإرجاع من أسلوب flags()، والتأكد من أنك العودة قيمة صالحة للQt.CheckStateRole من أسلوب data().

إذا كنت تستخدم فئة QStandardItemModel، وتشمل Qt.ItemIsUserCheckable العلم في تلك التي تمر على طريقة setFlags() كل بند، وتعيين الاختيار الدولة لQt.CheckStateRole مع طريقة setData() لها.

في جلسة بيثون التفاعلية، اكتب ما يلي:

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

نصائح أخرى

وانتهى بي الأمر باستخدام طريقة التي تقدمها ديفيد 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 مع دور الاختيار لsetCheckState وتستخدم setCheckable بدلا من أعلام

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top