Имеется (упрощённо) вот такая система layout'ов:
QWidget
+------------------------------------------+
| QHBoxLayout |
| +--------------------------------------+ |
| | QScrollArea | |
| | +----------------------------------+ | |
| | | QWidget | | |
| | | +------------------------------+ | | |
| | | | QHBoxLayout | | | |
| | | | +--------------------------+ | | | |
| | | | | QWidget | | | | |
| | | | | +----------------------+ | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | +----------------------+ | | | | |
| | | | +--------------------------+ | | | |
| | | +------------------------------+ | | |
| | +----------------------------------+ | |
| +--------------------------------------+ |
+------------------------------------------+
Самый верхний виджет имеет фон в виде пиксмапа, задаваемого в CSS. Необходимо, чтобы все виджеты, начиная с самого вложенного, были прозрачными. Вложенный виджет отрисовывается сам через paintEvent().
До того, как я начал использовать QScrollArea, система была немного проще: QWidget->QHBoxLayout->QWidget->QHBoxLayout->QWidget, и всё работало. Т.е. было видно, что на главном окне расположено несколько компонентов, промежуточных виджетов видно не было (по-мойму это особенность CSS в Qt -виджеты имеют прозрачный фон по умолчанию), и это было отлично.
Теперь я добавил QScrollArea, код наподобие
area = new QScrollArea;
area->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
area->setWidget(new QWidget);
area->setWidgetResizable(true);
и теперь рисуется белый фон. Попробовал установить атрибут:
area->widget()->setAttribute(Qt::WA_NoSystemBackground);
Вроде бы всё стало опять прозрачно,
но самый вложенный виджет перестал автозаполняться фоном при перерисовке, т.е. изначально он прозрачен, но все дальнейшие вызовы paintEvent() накладыватся один на один, превращая виджет в кашу.
Ну и наконец вопрос - что посоветуете, чтобы заново добиться прозрачности? Спасибо.
P.S. QScrollArea убирать нельзя