在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());
}
所以这是我的问题:
(假设我想使用QMessagBox而不是setTextColor,并希望打印出QlistWidget中的所有字符串项。)
答案 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!
}