23

在 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 中的所有字符串项。)

4

3 回答 3

48

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

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

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

希望有帮助!

于 2012-08-31T21:37:20.207 回答
4

你可以这样做:

for(int i = 0; i < listWidget->count(); ++i)
{
    QString str = listwidget.item(i)->text();
    //Do stuff!
}
于 2016-08-26T05:20:30.273 回答
2

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

于 2012-08-31T23:31:06.430 回答