c++ - Qt 4.6 - C++ - QTreeWidgetItem 迭代器

标签 c++ qt iterator

我有一个包含项目的 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 标志仅测试每个 QTreeWidgetItem 中第 0 列的检查状态。将第 0 列用作复选框,将第 1 列用作唯一编号应该会导致循环打印值。

关于c++ - Qt 4.6 - C++ - QTreeWidgetItem 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2044141/

相关文章:

qt - 禁用 QComboBox 中的特定项目

java - 为嵌套 HashMap 实现 Java 迭代器,其中元素可以是 1) Integer 或 2) 另一个嵌套 HashMap 或 3) 空 HashMap 中的任意一个

c++ - 对同一对象同时使用 Map 和 List

c++ - Qt weatherinfo demo中,部分内容超出窗口边界

c++ - Linux 多线程 - 线程不会按预期产生任何输出

c++ - Visual Studio 2008 的语法检查

c++ - 如何从另一个 C++ 类访问一个结构?

c++ - 如何在 QT 中使用 QDomDocument 对象将字符串读取为 XML

c++ - 迭代器的麻烦

Java - 迭代两个列表,比较然后添加到另一个列表