Настройка прозрачного фона QWidget / QScrollArea не влияет

этот вопрос относится к

Я спрашиваю здесь, потому что я считаю, что сообщество SO может иметь способ исправить это поведение.

поэтому мне нравится устанавливать цвет фона ScrollArea либо быть прозрачным или к пользовательскому фоновому изображению, поскольку оно будет содержать некоторые баннеры. Я запустил его в Qt Creator (дизайнер уже)! : -):

Qt Creator sample

но при развертывании приложения в симуляторе он не будет работать, остаются серыми, темно-серыми:

Emulator sample

вот мое дерево планировка:

Layout Tree

и вот таблица стилей, которую я использую (прикреплено и установлено в 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 ответов


можно попробовать 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

интересно есть два виджеты с непрозрачным фоном. Первый-это 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. Аккуратный стиль!