【问题标题】:How can i iterate through QListWidget items and work with each item?我如何遍历 QListWidget 项目并使用每个项目?
【发布时间】:2012-08-31 21:18:52
【问题描述】:

在 CSharp 中就像写一样简单:

listBox1.Items.Add("Hello");
listBox1.Items.Add("There");

foreach (string item in listBox1.Items )
{
    MessageBox.Show(item.ToString());
}

我可以轻松地将不同的对象添加到列表框中,然后使用 foreach 检索它们。 我在 Qt 4.8.2 中尝试了相同的方法,但它们似乎不同。尽管它们一开始看起来非常相似。我发现 Qt 支持 foreach 所以我继续尝试 类似:

foreach(QListWidgetItem& item,ui->listWidget->items())
{
    item.setTextColor(QColor::blue());
}

显然失败了。它说 items() 需要一个让我感到困惑的参数。我正在尝试遍历 ListBox 本身,这是什么意思? 我尝试将 ListBox 对象作为参数本身传递,这也失败了:

foreach(QListWidgetItem& item,ui->listWidget->items(ui->listWidget))
{
    item.setTextColor(QColor::blue());
}

所以这是我的问题:

  • 如何在 Qt 中遍历 QListWidget 项?
  • 我可以像 C# 一样将对象作为项目存储在 QListWidgets 中吗?
  • 如何将 QListWidgets 中的对象转换为字符串(Qt 中的 C#s ToString 计数器部分)?

(假设我想使用 QMessagBox 而不是那个 setTextColor 并想打印出 QlistWidget 中的所有字符串项。)

【问题讨论】:

    标签: c++ qt qlistwidget


    【解决方案1】:

    我认为items function 不会像您认为的那样做。这听起来像是用于解码 MIME 数据,而不是获取小部件中所有项目的列表。

    遗憾的是,我实际上没有看到任何功能可以完全按照您的意愿行事。您可能可以使用findItems 作为解决方法,但这看起来很难看,如果不是彻头彻尾的辱骂...至少您仍然可以使用带有良好旧for 循环的item function - 它们不是那个 更多的输入:

    for(int i = 0; i < listWidget->count(); ++i)
    {
        QListWidgetItem* item = listWidget->item(i);
        //Do stuff!
    }
    

    希望有帮助!

    【讨论】:

    • 谢谢。不幸的是,Qt 决定创建一个不会返回 QListWidgetItems 集合的项目类方法,就像人们对任何其他开发库的项目类方法所期望的那样。混乱和笨拙。我的意思是,当 Qt 中的 foreach() 甚至没有提供一种方法来用它迭代这个小部件的子项时,为什么要吹嘘呢?
    【解决方案2】:

    你可以这样做:

    for(int i = 0; i < listWidget->count(); ++i)
    {
        QString str = listwidget.item(i)->text();
        //Do stuff!
    }
    

    【讨论】:

      【解决方案3】:

      如果您在代码中创建列表项,请尝试为每个项创建一个指针。但是,如果您使用 .ui 文件来创建列表项,请尝试右键单击它并点击编辑样式表。您可以通过这种方式非常轻松地对其进行编辑。

      【讨论】:

        猜你喜欢
        • 2013-09-22
        • 1970-01-01
        • 2020-10-30
        • 2021-02-19
        • 1970-01-01
        • 1970-01-01
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多