C++ 如何迭代QListWidget项并处理每个项?

C++ 如何迭代QListWidget项并处理每个项?,c++,qt,qlistwidget,C++,Qt,Qlistwidget,在CSharp中,它与书写一样简单: listBox1.Items.Add("Hello"); listBox1.Items.Add("There"); foreach (string item in listBox1.Items ) { MessageBox.Show(item.ToString()); } 我可以很容易地将不同的对象添加到列表框中,然后使用foreach检索它们。 我在Qt4.8.2中尝试了相同的方法,但它们似乎有所不同。虽然它们一开始看起来很相似。我发现Qt支持

在CSharp中,它与书写一样简单:

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

foreach (string item in listBox1.Items )
{
    MessageBox.Show(item.ToString());
}
我可以很容易地将不同的对象添加到列表框中,然后使用foreach检索它们。 我在Qt4.8.2中尝试了相同的方法,但它们似乎有所不同。虽然它们一开始看起来很相似。我发现Qt支持foreach,所以我继续尝试 比如:

foreach(QListWidgetItem& item,ui->listWidget->items())
{
    item.setTextColor(QColor::blue());
}
显然失败了。它说items()需要一个参数,这让我很困惑。我试图遍历列表框本身,那么这意味着什么呢? 我尝试将ListBox对象作为参数本身传递,但再次失败:

foreach(QListWidgetItem& item,ui->listWidget->items(ui->listWidget))
{
    item.setTextColor(QColor::blue());
}
下面是我的问题:

  • 如何在Qt中迭代QListWidget项
  • 我可以将对象作为项目存储在QListWidget(如C#)中吗
  • 如何将QListWidgets中的对象转换为字符串(Qt中的C#s ToString计数器部分)
(假设我想使用qMessageBox而不是setTextColor,并想打印出QlistWidget中的所有字符串项。)

我不认为它做了您认为它做的事情。它听起来像是用于解码MIME数据,而不是获取小部件中所有项目的列表

遗憾的是,我并没有看到任何函数能够完全满足您的需求。你可能会用它作为一个解决办法,但这看起来很丑陋,如果不是彻头彻尾的辱骂。。。至少,您仍然可以对循环使用良好的旧
,它们不需要太多的输入:

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

希望有帮助

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

您可以执行以下操作:

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

谢谢您的帮助。不幸的是,Qt决定创建一个items类方法,该方法不返回QListWidgetItems的集合,这与任何其他dev库的items类方法所期望的一样。令人困惑和笨拙。我的意思是,为什么夸耀Qt中的foreach()呢?他们甚至没有提供一种方法来迭代这个小部件的子项?