Ответ 1
Можете ли вы попробовать scrollArea.setStyleSheet("background-color:transparent;");
Это работает для меня.
Этот вопрос относится к
Я спрашиваю здесь, потому что я считаю, что сообщество SO может иметь способ исправить это поведение.
Итак, мне нравится устанавливать цвет фона ScrollArea как прозрачным, так и на пользовательское фоновое изображение, так как оно будет содержать некоторые баннеры. Я уже начал работать в Qt Creator (Дизайнер)!: -):
Но при развертывании приложения к симулятору он не будет работать, они остаются серыми, темно-серыми:
Вот мое дерево макетов:
И вот таблица стилей, которую я использую (прикреплен и установлен в MainWindow):
QMainWindow {
background: transparent url(:/ui/designs/images_from_android/bg_plain_empty.png) top left;
}
QWidget#centralWidget {
background-color: transparent;
}
QPushButton {
color: red;
border: 1px solid green;
}
QFrame#top_header {
background: transparent url(:/ui/designs/images_from_android/bg_title_bar_landscape.png) top left repeat-x;
}
QWidget#top_banner_scroll1,
QWidget#top_banner_scroll2 {
background: transparent url(:/ui/designs/images_from_android/stripe_bg.png) top left repeat-x;
}
Это довольно озадачивает. И поскольку Qt Designer показывает мне правильный дизайн...
Можете ли вы попробовать scrollArea.setStyleSheet("background-color:transparent;");
Это работает для меня.
Используйте таблицу стилей
QScrollArea { background: transparent; }
QScrollArea > QWidget > QWidget { background: transparent; }
QScrollArea > QWidget > QScrollBar { background: palette(base); }
Чтобы понять это, можно использовать аналогичный, но простой макет:
scrollarea QScrollArea
+ scrollareaContent QWidget
+ label QLabel
Интересно, что есть два виджетов с непрозрачным фоном. Во-первых, это прокруточная область (прозрачная с первой строкой таблицы стилей).
Другой (который я не ожидал) - это scrollareaContent, который обращается ко второй строке. Там первый QWidget является частным видовым окном QScrollArea, к которому невозможно напрямую получить доступ. Другой - это scrollareaContent. Этот подход должен сделать прозрачность QScrollAreas без ущерба для любого другого виджетов.
UPDATE: Я добавил третью строку в таблицу стилей, которая препятствует тому, чтобы полосы прокрутки стали прозрачными, так как они также QWidgets на два уровня ниже QScrollArea.
Используя следующие таблицы стилей, я смог сделать область прокрутки прозрачной, сохраняя цвет фона по умолчанию для полос прокрутки:
scrollArea.setStyleSheet("QScrollArea {background-color:transparent;}");
scrollAreaContents.setStyleSheet("background-color:transparent;");
Не следует ли устанавливать стили на QScrollArea#top_banner1
и QScrollArea#top_banner2
?
В настоящее время вы выбираете QWidgets для видового экрана, и, по моему опыту, чистые QWidgets всегда имеют прозрачный фон и не поддерживают стиль. Таким образом, если область прокрутки имеет цвет, она будет отображаться.
PS. Аккуратный стиль!