Используйте таблицу стилей
QScrollArea { background: transparent; }
QScrollArea > QWidget > QWidget { background: transparent; }
QScrollArea > QWidget > QScrollBar { background: palette(base); }
Чтобы понять это, давайте возьмем похожий, но просто раскладываемый макет:
scrollarea QScrollArea
+ scrollareaContent QWidget
+ label QLabel
Интересно, что есть два виджета с непрозрачный фон.Первая - это scrollarea (сделанная прозрачной с помощью первой строки таблицы стилей).
Другая (которую я не ожидал) - scrollareaContent , котораяобращается ко второй строке.Там первый QWidget является частным окном просмотра QScrollArea, к которому нельзя получить прямой доступ.Другой является scrollareaContent .Этот подход должен сделать все QScrollAreas прозрачными, не затрагивая другие виджеты.
ОБНОВЛЕНИЕ: Я добавил третью строку в таблицу стилей, которая предотвращает прозрачность полос прокрутки, поскольку они также являются QWidget двауровни ниже QScrollArea.