web-dev-qa-db-ja.com

QListWidgetアイテムを反復処理して各アイテムを操作するにはどうすればよいですか?

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カウンターパート)?

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

21
Rika

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

残念ながら、私は実際にあなたが望んでいることを正確に実行するための機能を見ていません。おそらく findItems を回避策として使用できますが、実際には乱用されていないとしても、醜く見えます...少なくとも古き良きforループ-それらはそれではありませんより多くのタイピング:

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

お役に立てば幸いです。

35
Xavier Holt

コードでリストアイテムを作成する場合は、各アイテムへのポインターを作成してみてください。ただし、.uiファイルを使用してリストアイテムを作成する場合は、リストアイテムを右クリックして、編集スタイルシートを押してみてください。そうすれば、非常に簡単に編集できます。

2
user1581100

あなたはこのようなことをすることができます:

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