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

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

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

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

【问题讨论】:

    标签: qt qt4


    【解决方案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) 验证复选框是否被选中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2020-09-19
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多