如何创建 QCheckBoxes 的可折叠列表?

Posted

技术标签:

【中文标题】如何创建 QCheckBoxes 的可折叠列表?【英文标题】:How do I create a collapsible list of QCheckBoxes? 【发布时间】:2011-11-28 17:04:31 【问题描述】:

我想制作一个 QCheckBoxes 的嵌套列表,有点像 QtreeWidgetItem 和 QCheckBox 之间的交叉。根据我在谷歌上搜索的结果,我可以在 QTreeWidgetItem 中设置一个标志以使其可检查。所以我有这个代码:

QTreeWidgetItem *treeWidgetItem = new QTreeWidgetItem(parent); treeWidgetItem->setFlags(Qt::ItemIsUserCheckable);

但是,当项目显示在我的 QTreeWidget 中时,没有复选框。该行显示为灰色。如何使 QTreeWIdgetItem 可检查?

【问题讨论】:

【参考方案1】:

您需要在 QTreeWidgetItem 上调用 setCheckState 以确保复选框出现。这来自 Qt 文档。

void QTreeWidgetItem::setCheckState (int column, Qt::CheckState state)

将给定列检查状态中的项目设置为指定状态。

即使您想关闭复选框,您仍然必须这样做。

【讨论】:

我添加了以下几行:treeWidgetItem->setFlags(Qt::ItemIsSelectable)、this->setFlags(Qt::ItemIsEnabled) 和 treeWidgetItem->setCheckState(0, Qt::Unchecked)。我的 QTreeWIdgetItem 中出现了一个复选框。但是,当我单击复选框时,没有任何反应。此外,我似乎也无法选择该项目。 请记住,当您调用 setFlags 时,您必须将所需的所有选项合并在一起,如下所示: item->setFlags(ItemIsSelectable | ItemIsUserCheckable);我认为您可能不小心关闭了您需要的标志。 另一个问题,当我点击QTreeWidgetItem中的复选框时,会发出什么信号? QTreeWidget 上有一个名为 itemChanged(QTreeWidgetItem *, int) 的信号,它传递被更改的项目和列。您知道该列,因为这是您调用 setCheckState 时传递的内容。当这个信号被触发时,在你的插槽中使用 QTreeItemWidget 上的 checkState(int) 验证复选框是否被选中。

以上是关于如何创建 QCheckBoxes 的可折叠列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AMP 中创建类似 Bootstrap 的可折叠文件?

jquery mobile外部面板中的可折叠列表视图无法正确显示

React-Native 应用程序的可折叠和可拖动部分列表

Clojure 中的可折叠集合是啥?

Flutter折叠展开列表的使用

Flutter折叠展开列表的使用