Pat*_*sut 5 c++ checkbox qt qtreewidget
我怎么做?实际上我的主要目标是确定选中哪个复选框QTreeWidget.但是,如果你们帮我解决这个问题,我可以这样做.好吧,我找不到一个方法再给我一个QList<QTreeWidgetItem *>所以我可以遍布整个列表并检查复选框是否被选中(奇怪的句子,嗯?).
QTreeWidget::selectedItems()不做我想做的事.它实际上得到了所选的项目(可能只有一个.所以我不知道itemS在这里意味着什么.无论如何我可能是错的).
我现在的主要目标是:通过QTreeWidget它可以做任何我想做的事情.
提前致谢.
Chr*_*ris 21
由于您正在处理树,因此API旨在使您能够访问QTreeWidgetItem树结构中的s.因此,没有直接的方法可以QTreeWidgetItem直接通过Qt的API直接访问每一个.但是,有两种方法可以做到这一点:
1)如果您的所有物品(或您关心的所有物品)都是"顶级"物品,那么您可以执行以下操作:
for( int i = 0; i < tree->topLevelItemCount(); ++i )
{
QTreeWidgetItem *item = tree->topLevelItem( i );
// Do something with item ...
}
Run Code Online (Sandbox Code Playgroud)
2)如果您需要访问树中的每个项目以及该项目的子项,则可以按顺序执行递归方法:
doStuffWithEveryItemInMyTree( tree->invisibleRootItem() );
void doStuffWithEveryItemInMyTree( QTreeWidgetItem *item )
{
// Do something with item ...
for( int i = 0; i < item->childCount(); ++i )
doStuffWithEveryItemInMyTree( item->child(i) );
}
Run Code Online (Sandbox Code Playgroud)
下面的代码是用 Python 编写的,但它可以很容易地转换为 C++。我遇到了与问题中描述的问题完全相同的问题,但我使用的是 PySide(Python Qt 绑定)。
如果要获取QTreeWidgetItem给定项目(包括该项目本身)下所有s的列表,请使用第一个函数。要获取QTreeWidgetItem树中所有s的列表,请调用第二个函数。
def get_subtree_nodes(tree_widget_item):
"""Returns all QTreeWidgetItems in the subtree rooted at the given node."""
nodes = []
nodes.append(tree_widget_item)
for i in range(tree_widget_item.childCount()):
nodes.extend(get_subtree_nodes(tree_widget_item.child(i)))
return nodes
def get_all_items(tree_widget):
"""Returns all QTreeWidgetItems in the given QTreeWidget."""
all_items = []
for i in range(tree_widget.topLevelItemCount()):
top_item = tree_widget.topLevelItem(i)
all_items.extend(get_subtree_nodes(top_item))
return all_items
Run Code Online (Sandbox Code Playgroud)
如果您想获得 QTreeWidget 中所有 QTreeWidgetItem 的列表,您可以执行以下操作
QList<QTreeWidgetItem *> items = ui->treeWidget->findItems(
QString("*"), Qt::MatchWrap | Qt::MatchWildcard | Qt::MatchRecursive);
Run Code Online (Sandbox Code Playgroud)