QListWidget Добавить пользовательские элементы в Qt? - PullRequest
7 голосов
/ 08 ноября 2011

Как добавить 2 изображения и текст в QListWidget во время выполнения в Qt?Я хочу разместить одно изображение в начале списка, а одно - в конце, и текст должен быть вскоре после моего первого изображения.

1 Ответ

10 голосов
/ 08 ноября 2011

Посмотрите на функцию setItemWidget. Вы можете создать виджет (назовите его MyListItemWidget), который содержит две метки значков и текстовую метку, а в его конструкторе укажите две иконки и текст. Тогда вы можете добавить его в свой QListWidget. Пример кода следующий:

QIcon icon1, icon2; // Load them 
MyListItemWidget *myListItem = new MyListItemWidget(icon1, icon2, "Text between icons");
QListWidgetItem *item = new QListWidgetItem();
ui->listWidget->addItem(item);
ui->listWidget->setItemWidget(item, myListItem );

Вам также следует взглянуть на QListView и QItemDelegate, которые являются лучшим вариантом для разработки и отображения пользовательских элементов списка.

ИЗМЕНИТЬ, КАСАЮЩИЕСЯ ВАШЕГО СОЕДИНЕНИЯ

При подключении сигнала к слоту их подпись должна совпадать. Это означает, что слот не может иметь больше параметров, чем сигнал. Из документации по слотам для сигналов

Механизм сигналов и слотов является типобезопасным: подпись Сигнал должен соответствовать подписи принимающего слота. (На самом деле слот может иметь более короткую подпись, чем сигнал, который он получает, потому что он может игнорировать дополнительные аргументы.)

Это означает, что ваш сигнал должен иметь аргумент QListWidgetItem * в соединении.

connect(list, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(clicked(QListWidgetItem *)))
...