如何迭代QListWidget项并处理每个项

How can I iterate through QListWidget items and work with each item?

本文关键字:处理 QListWidget 何迭代 迭代      更新时间:2023-10-16

在CSharp中,它就像编写一样简单

listBox1.Items.Add("Hello");
listBox1.Items.Add("There");
foreach (string item in listBox1.Items )
{
    MessageBox.Show(item.ToString());
}

我可以很容易地将不同的对象添加到列表框中,然后使用foreach检索它们。

我在问题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#ToString计数器部分)

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

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

遗憾的是,我实际上看不到任何功能可以完全按照你的意愿进行。你可能会使用findItems作为一种变通方法,但这似乎很丑陋,如果不是彻头彻尾的滥用。。。至少你仍然可以将item函数与好的旧for循环一起使用——它们不是更多的类型:

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

希望能有所帮助!

您可以这样做:

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

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