我如何迭代QListWidget项目并处理每个项目?

时间:2012-08-31 21:18:52

标签: c++ qt qlistwidget

在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项?
  • 我可以将对象存储为QListWidgets中的项目,如C#?
  • 如何将QListWidgets中的对象转换为字符串(Qt中的C#s ToString计数器部分)?

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

3 个答案:

答案 0 :(得分:30)

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

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

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

希望有所帮助!

答案 1 :(得分:2)

如果要在代码中创建列表项,请尝试指向每个项目。但是,如果您使用.ui文件制作列表项,请尝试右键单击它并按下编辑样式表。你可以很容易地编辑它。

答案 2 :(得分:2)

您可以这样做:

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