透明QWidget / QScrollArea背景样式设置无效

时间:2011-01-28 07:46:14

标签: qt symbian

这个问题与

有关

我在这里问,因为我相信SO社区可能有办法解决这个问题。

所以我喜欢将ScrollArea的背景颜色设置为透明或自定义背景图像,因为它将包含一些横幅。 我已经在Qt Creator( Designer )中运行了它! : - ):

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 个答案:

答案 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_banner1QScrollArea#top_banner2吗?

您目前正在选择视口QWidgets,根据我的经验,纯QWidgets始终具有透明背景并且不支持样式。因此,如果滚动区域有颜色,它将显示。

PS。造型整洁!