- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个项目列表,并将其添加到 QListWidget 中,这些项目在其中进行了“分类”。
在我的以下代码中,我有 2 个类别 - -- 所有数字 --
和 -- 所有字母 --
。在每个类别中,它都有其子项目。
由于我已将所有项目设置为可选项,是否可以选中/取消选中这些标题项目并使其影响其子项目?
例如。如果我检查 -- All Nums
,所有 num_items
也会被检查。如果我取消选中它,它们也会被取消选中。
class TestDialog(QtGui.QDialog):
def __init__(self, parent=None):
super(TestDialog, self).__init__()
self.listWidget = QtGui.QListWidget()
all_num = QtGui.QListWidgetItem('-- All Nums --')
self.listWidget.addItem(all_num)
num_items = ['One', 'Two', 'Three']
for num in num_items:
self.listWidget.addItem(num)
all_letters = QtGui.QListWidgetItem('-- All Letters --')
self.listWidget.addItem(all_letters)
letter_items = ['One', 'Two', 'Three']
for letter in letter_items:
self.listWidget.addItem(letter)
for index in range(self.listWidget.count()):
item = self.listWidget.item(index)
item.setFlags(
item.flags() |
QtCore.Qt.ItemIsUserCheckable |
QtCore.Qt.ItemIsEditable
)
item.setCheckState(QtCore.Qt.Unchecked)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.listWidget)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = TestDialog()
w.show()
sys.exit(app.exec_())
最佳答案
解决方案的想法是使用一个角色来存储该项目是否为类别的信息,并使用另一个角色来指示项目之间的父关系,然后使用委托(delegate)来修改它们是否满足要求。
from PyQt4 import QtCore, QtGui
IsCategoryRole = QtCore.Qt.UserRole
ParentRole = QtCore.Qt.UserRole + 1
class CategoryDelegate(QtGui.QStyledItemDelegate):
def editorEvent(self, event, model, option, index):
old_state = model.data(index, QtCore.Qt.CheckStateRole)
res = super(CategoryDelegate, self).editorEvent(
event, model, option, index
)
current_state = model.data(index, QtCore.Qt.CheckStateRole)
if old_state != current_state:
if index.data(IsCategoryRole):
pix = QtCore.QPersistentModelIndex(index)
for i in range(model.rowCount()):
ix = model.index(i, 0)
if pix == ix.data(ParentRole):
model.setData(
ix, current_state, QtCore.Qt.CheckStateRole
)
return res
class ListWidget(QtGui.QListWidget):
def __init__(self, parent=None):
super(ListWidget, self).__init__(parent)
delegate = CategoryDelegate(self)
self.setItemDelegate(delegate)
def addCategory(self, text):
item = ListWidget.create_checkable_item(text)
item.setData(IsCategoryRole, True)
self.addItem(item)
return item
def addItemToCategory(self, category_item, text):
item = ListWidget.create_checkable_item(text)
item.setData(IsCategoryRole, False)
ix = self.indexFromItem(category_item)
pix = QtCore.QPersistentModelIndex(ix)
item.setData(ParentRole, pix)
self.addItem(item)
return item
@staticmethod
def create_checkable_item(text):
item = QtGui.QListWidgetItem(text)
item.setFlags(
item.flags()
| QtCore.Qt.ItemIsUserCheckable
| QtCore.Qt.ItemIsEditable
)
item.setCheckState(QtCore.Qt.Unchecked)
return item
class TestDialog(QtGui.QDialog):
def __init__(self, parent=None):
super(TestDialog, self).__init__()
self.listWidget = ListWidget()
all_num = self.listWidget.addCategory("-- All Nums --")
num_items = ["One", "Two", "Three"]
for num in num_items:
self.listWidget.addItemToCategory(all_num, num)
all_letters = self.listWidget.addCategory("-- All Letters --")
letter_items = ["One", "Two", "Three"]
for letter in letter_items:
self.listWidget.addItemToCategory(all_letters, letter)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.listWidget)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
w = TestDialog()
w.show()
sys.exit(app.exec_())
关于python - 检查对 QListWidget 中的特定项目集产生影响的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56999157/
我正在通过单击 ui 上的按钮更改 QListWidgetItem 标题(QListWidgetItem 文本),在此之下我还调用了 repaint() 和 update(),但标题不会更改(刷新),
我有课 class MyClass { public: QString name; int age; }; ... MyClass* itm1= new MyClass(); itm1
我的应用程序 (Qt 4.6) 要求我在列表中显示某些消息,该列表在添加新行时总是向下滚动(因此最近的行始终可见)。 由于我在包括显示这些单行消息在内的整个过程中遇到性能问题,所以我运行了一些测试并发
我有一个 QListWidget,里面有一些小部件: QListWidgetItem* w = new QListWidgetItem(ui->listWidget); ui->listWidget-
是否可以根据其内容调整 QListWidget 的高度和宽度? sizeHint() 始终返回 256, 192,无论其内容是什么。 QListWidgetItem 的 sizeHint() 返回 -
我用一些项目创建了 QListWidget。 QHBoxLayout* h_layout = new QHBoxLayout; h_layout->setMargin( 0 ); me
我正在 Qt 中创建一个可排序列表。该代码对于向下滚动效果非常好,但是当我在向下滚动列表后获取可拖动项目时遇到一些问题。我添加了一些测试用例屏幕截图以便更好地理解 这是测试用例代码 #incl
我是 Qt 框架的新手。在新应用程序中,我想创建包含自定义项目的列表。这些项目非常简单,必须包含标题标签、缩略图和描述标签 (picture here) 现在我不想玩自定义绘图和所有这些东西,因为我认
我创建了一个自定义 QListWidget,其中添加了自定义列表小部件(在本例中只是 QPushButton 小部件),所有设置都添加到它的 QListWidgetItems 中,以便我可以从 QPu
我有一个带有一系列 QListWidget 的 GUI,第一个 QListWidget 应该有文本项和图标项,图标的标签位于侧面。其他 QListWidget 的项目应与第一个 QListWidget
我在 PySide2 中有一个 QListWidget,我希望所选项目具有不同的颜色。这可能吗?我将附上两张图片来演示。 我目前拥有的: 这就是我想要的: 最佳答案 您必须使用委托(delegate)
我想创建一个包含许多这些项目的 QListView 或 QListWidget。我研究过创建委托(delegate)并使用 setItemWidget 来设置小部件。我在这两方面都遇到困难。 下面是在
我需要在“.ui”文件中的 QListWidget 提出的不同选项中包含文本和希腊符号(用于简单的数学方程)(我以前使用 Qt Designer,如果重要的话我喜欢 python)。我希望选项显示如下
删除QListWidget中的一项后,我在更新它时遇到了一些问题。 这是代码的一部分: class Window(QMainWindow): list_1 = [] #The items are
我想写一个“无限滚动”的列表小部件。滚动应该根据计时器自动发生。不会有任何用户交互。例如,该列表包含项目 0-100。如果滚动区域达到第 100 项,则显示的下一个项目应该是第 1 项,依此类推(如滚
在 Qt 4.6.1 上,当我连接来自 QListWidget 的 itemChanged 信号时,我没有看到每次编辑时的连续发射行为,如中所述 Qt - signal for when QListW
我问这个问题是因为我不知道如何用谷歌搜索它,我找不到合适的关键字。 我有一个包含字符串的QListWidget。字符串很长,如果我禁用水平滚动,这正是我想要的,那么文本以...结尾,因为它太长了。 我
在我的 QMainWindow 构造函数中,我读取了一个数据库并用项目填充了我的 QListWidget。显然没有选择任何项目,所以我必须自己做。我还有一个插槽,当我单击列表中的项目时将调用它。 我试
我有一个包含多个项目的 QListWidget,每个项目都像一个按钮,在单击时做出响应。我遇到了一个问题,如果您单击一个项目并将鼠标拖动到屏幕上除您单击的项目之外的任何其他位置,那么程序将导致段错误并
如何使我的 QListWidget 高度与我的主窗口相同? 因此,如果我更改主窗口,它必须调整大小,如果无法在小部件中查看所有列表,则使滚动条可见,等等。 最佳答案 Qt 有一个叫做 layouts
我是一名优秀的程序员,十分优秀!