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 のオブジェクトを string(C#s ToString counter part in Qt) に変換するにはどうすればよいですか?

(setTextColor の代わりに QMessagBox を使用し、QlistWidget 内のすべての文字列項目を出力したいとします。)

4

3 に答える 3

48

私はアイテム機能があなたが思っていることをするとは思わない. ウィジェット内のすべてのアイテムのリストを取得するのではなく、MIME データをデコードするためのようです。

残念ながら、あなたが望むことを正確に行う機能は実際にはありません。おそらく回避策としてfindItemsを使用できますが、それはまったく乱用ではないにしても、醜いようです...少なくとも、古き良きループでアイテム関数を使用できます-それらはそれほど多くの入力ではありません: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 に答える