Настройка прозрачного фона QWidget / QScrollArea не влияет
этот вопрос относится к
- http://www.qtcentre.org/threads/18151-QScrollArea-misbehaving-background-style
- http://www.qtforum.org/article/34443/cannot-change-background-color-of-a-qscrollarea-with-setstylesheet.html
Я спрашиваю здесь, потому что я считаю, что сообщество 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 показывает мне правильный дизайн...
4 ответов
используйте таблицу стилей
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 прозрачными, не затрагивая ни один из других виджетов.
обновление: я добавил третью строку в таблицу стилей, которая предотвращает прозрачность полос прокрутки, поскольку они также являются QWidgets на два уровня ниже QScrollArea.
используя следующие таблицы стилей, я смог сделать область прокрутки прозрачной, сохраняя при этом цвет фона по умолчанию для полос прокрутки:
scrollArea.setStyleSheet("QScrollArea {background-color:transparent;}");
scrollAreaContents.setStyleSheet("background-color:transparent;");
разве вы не должны устанавливать стили в QScrollArea#top_banner1
и QScrollArea#top_banner2
?
в настоящее время вы выбираете видовое окно QWidgets и, по моему опыту, чистые QWidgets всегда имеют прозрачный фон и не поддерживают стиль. Таким образом, если область прокрутки имеет цвет, она будет отображаться.
PS. Аккуратный стиль!