这个问题与
有关我在这里问,因为我相信SO社区可能有办法解决这个问题。
所以我喜欢将ScrollArea的背景颜色设置为透明或自定义背景图像,因为它将包含一些横幅。 我已经在Qt Creator( Designer )中运行了它! : - ):
但是当将应用程序部署到模拟器时它将无法正常工作,它们会保持灰色,深灰色:
这是我的布局树:
这是我正在使用的样式表(附加并设置为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向我展示了合适的设计......
答案 0 :(得分:15)
使用样式表
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透明,而不会影响任何其他小部件。
更新:我在样式表中添加了第三行,以防止滚动条变为透明,因为它们也是QScroll在QScrollArea之下的两个级别。
答案 1 :(得分:4)
使用以下样式表,我可以使滚动区域透明,同时保持滚动条的默认背景颜色:
scrollArea.setStyleSheet("QScrollArea {background-color:transparent;}");
scrollAreaContents.setStyleSheet("background-color:transparent;");
答案 2 :(得分:2)
你可以尝试scrollArea.setStyleSheet("background-color:transparent;");
它对我有用。
答案 3 :(得分:0)
您不应该将样式设置为QScrollArea#top_banner1
和QScrollArea#top_banner2
吗?
您目前正在选择视口QWidgets,根据我的经验,纯QWidgets始终具有透明背景并且不支持样式。因此,如果滚动区域有颜色,它将显示。
PS。造型整洁!