Help us understand the problem. What is going on with this article?

QListWidgetItemにウィジェットを追加する方法

More than 3 years have passed since last update.

はじめに

独自にカスタマイズしたウィジェットを、QListWidgetに追加する方法を調べたので、まとめておきたいと思います。

QListWidgetの使い方

まずは、以下のようにしてQListWidgetItemを追加します。

    QListWidgetItem *item = new QListWidgetItem();
    item->setSizeHint(QSize(50, 50));
    ui->listWidget->addItem(item);

setSizeHintを忘れると、追加したアイテムの見た目が崩れるので注意してください。
つぎに、アイテムに追加したいウィジェットを用意します。

QWidget *myWidget = new QWidget();
// 〜 あれこれ設定 〜

そして、QListWidget::setItemWidget(QListWidgetItem *item, QWidget *widget)で、アイテムにウィジェットを設定します。

ui->listWidget->setItemWidget(item, myWidget);

アイテムを削除するには、QListWidget::takeItem(int row)で、リストからアイテムを取り除いた後、そのアイテムをdeleteしてやれば削除できます。

QListWidgetItem *item = ui->listWidget->takeItem(0);
delete item;

QListWidgetには、QListWidget::removeItemWidget(QListWidgetItem *item)というのもありますが、こちらはアイテムからウィジェットを取り除くだけで、アイテムはリストに残ったままになります。

詳しくは、公式ドキュメントを参照してください。

サンプル

アイテムを追加・削除するサンプルをGitHubに上げておきました。
GitHub - QListWidget_Sample

おわりに

独自にカスタムしたウィジェットを追加できるようになったのですが、注意点があります。
中身が動的に変化するようなウィジェットを追加したい場合、QListWidgetは使えません。
この場合は、QListViewQItemDelegateを使う必要があります。
この辺はまだ調べていないので、調べたらまとめたいと思います。

tatsuteb
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away