我有一个带有项目的QTreeWidget。第一列包含唯一编号。这是通过item-> setData(0,0,unique_number);设置的。第二列包含一个复选框,可通过item-> setCheckState(1,Qt::Unchecked);设置。用户可以选择要使用的项目,然后按一个按钮。该按钮的插槽将在选中的项目上运行一个循环。在Qt文档中给出了一个示例。您使用QTreeWidgetItemIterator。
QTreeWidgetItemIterator it(treeWidget);
while (*it) {
if ((*it)->text(0) == itemText)
(*it)->setSelected(true);
++it;
}
它还说,您可以在构造函数中指定一个参数,以仅对选中的项进行迭代。标志是:QTreeWidgetItemIterator::Checked。我的稍微自定义的循环如下:
QTreeWidgetItemIterator it(treeWidget, QTreeWidgetItemIterator::Checked);
while (*it)
{
QVariant w;
w = (*it)->data(0, 0);
std::cout << "Selected item # " << w.toInt() << "\n";
it++;
}
这段代码可以正常编译,但是在您实际运行程序时将无法正常工作。它不打印任何值。
有小费吗?谢谢!
最佳答案
Qt文档中缺少的一个警告是QTreeWidgetItemIterator::Checked标志仅测试每个QTreeWidgetItems中列0的检查状态。在复选框中使用第0列,在唯一编号中使用第1列,应该会导致循环打印值。
关于c++ - Qt 4.6-C++-QTreeWidgetItem迭代器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2044141/