Я создаю уловку CustomWidgets в QListWidget. Пока это работает хорошо. Проблема возникает, когда я перемещаю вертикальную полосу прокрутки вниз и хочу отобразить элементы, которые ранее не были видны. Потом они вставляются как прозрачные прямоугольники, я могу нажимать на них и реагировать на нажатия, но они не рисуются. Они остаются прозрачными!
Я вставляю картинку, чтобы получить общее представление о проблеме:

В моем QListWidget я пытаюсь перекрасить его, но это не работает:
QListWidget::verticalScrollbarValueChanged(value);
auto item = this->itemAt(QPoint(24, value));
if (!item)
{
return;
}
auto widget = this->itemWidget(item);
if (!widget)
{
return;
}
// widget->resize(widget->size());
// widget->repaint();
widget->update();
Что я могу сделать? Спасибо за помощь!
Обновлено: По просьбе Мартина я вставляю сюда подпрограмму, которая показывает добавление элементов:
void ListControl::AddCustomWidget(QWidget* customWidget, const QSize& size, bool forceSize)
{
if (forceSize)
{
customWidget->adjustSize();
}
auto displaySize = customWidget->size();
auto width = size.width();
auto height = size.height();
auto item = new QListWidgetItem(this);
this->addItem(item);
if (width >= 0)
{
displaySize.setWidth(width);
}
else
{
displaySize.setWidth(displaySize.width() - (this->verticalScrollBar()->width() + this->rightSpace));
}
if (height >= 0)
{
displaySize.setHeight(height);
}
item->setSizeHint(displaySize);
this->setItemWidget(item, customWidget);
}
Структура достаточно сложная. Я мог бы представить здесь добавление предметов. Потому что это (я думаю) ключевой момент
Чего вы пытаетесь достичь, настраивая displaySize так, как вы это делаете? Вы отлаживали функцию и изучали, каким на самом деле становится displaySize? (Например, если ширина будет <= 0, это может привести к тому, что виджет не будет виден.)
item->setSizeHint является критической индикацией. Если это сделать неправильно, то могут возникнуть проблемы. Метод, который я использую, дает мне наилучшие результаты. Я проверил DisplaySize, он всегда правильный. Кроме того, если я отмечаю элемент, рисуется синий маркер, но особое содержимое не отображается.





Это происходит только на айфоне или на десктопе тоже? Не могли бы вы предоставить минимальный компилируемый пример?