Posted at

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

More than 1 year has 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を使う必要があります。

この辺はまだ調べていないので、調べたらまとめたいと思います。