Проблема: у меня есть простая QStringListModel, которую я хочу отобразить в виде. Однако я хочу, чтобы каждый элемент в представлении был пользовательским QWidget, который я создал. Я не понимаю, почему это такая сложная проблема! Я искал в Интернете решения, и, хотя я нахожу кусочки здесь и там, ни одно хорошее решение не отвечает всем моим потребностям.
Основной код для настройки моей модели / вида:
QStringList strings;
// add some strings to the model
QStringListModel* model = new QStringListModel(strings);
QListView* view = new QListView;
view->setModel(model);
Я пробовал разные попытки сделать это безрезультатно.
Попытка # 1
Я попытался создать подкласс нового объекта QItemDelegate. Внутри этого объекта я переопределил методы создания редактора. Я выполнил все шаги по настройке этого делегата. Проблема состоит в том, что когда представление заполняется моделью, оно захватывает каждый элемент в модели в Qt :: DisplayRole, когда мне нужно, чтобы захватить каждый элемент в Qt :: EditRole.
Попытка № 2
Другой метод, который я попробовал, заключался в создании подкласса QListView и переопределении метода setModel для вызова setIndexWidget для каждого элемента в модели. Мой код выглядит примерно так:
void CustomListView::setModel(QAbstractItemModel* model)
{
QListView::setModel(model);
for (int i = 0; i rowCount(); ++i)
{
QModelIndex index = model->index(i, 0);
CustomWidget* widget = new CustomWidget;
setIndexWidget(index, widget);
}
}
Это сработало, если добавить мой объект CustomWidget к каждой строке в представлении списка. Чтобы гарантировать, что обычные данные модели также не отображаются под моими объектами CustomWidget, я также переопределил CustomListView :: paintEvent (событие QPaintEvent *), чтобы ничего не делать. Опять же, это сработало.
Но моя главная проблема сейчас заключается в том, что при отображении списка, хотя мои CustomWidget отображаются на нем правильно, фон списка имеет сплошной белый цвет. Я попытался вызвать setAutoFillBackground (false) для CustomListView, но это ничего не сделало. Я хочу, чтобы у моего списка был прозрачный фон.
Любая обратная связь по этой проблеме будет очень приветствуется. Я потратил много времени, пытаясь заставить это работать! Спасибо!